/*
 * Copyright (c) 2018 Tencent. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
const AbstractModel = require("../../common/abstract_model");

/**
 * GetLivenessResult response structure.
 * @class
 */
class GetLivenessResultResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The final verification result.
         * @type {string || null}
         */
        this.Result = null;

        /**
         * The description of the final verification result.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * The face screenshot.
         * @type {FileInfo || null}
         */
        this.BestFrame = null;

        /**
         * The video for the detection.
         * @type {FileInfo || null}
         */
        this.Video = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Result = 'Result' in params ? params.Result : null;
        this.Description = 'Description' in params ? params.Description : null;

        if (params.BestFrame) {
            let obj = new FileInfo();
            obj.deserialize(params.BestFrame)
            this.BestFrame = obj;
        }

        if (params.Video) {
            let obj = new FileInfo();
            obj.deserialize(params.Video)
            this.Video = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * GetFaceIdTokenIntl response structure.
 * @class
 */
class GetFaceIdTokenIntlResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The SDK token, which is used throughout the verification process and to get the verification result.
         * @type {string || null}
         */
        this.SdkToken = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkToken = 'SdkToken' in params ? params.SdkToken : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ID cards of Hong Kong (China), Macao (China) and Taiwan (China), and international passport.
 * @class
 */
class InternationalIDPassport extends  AbstractModel {
    constructor(){
        super();

        /**
         * Passport ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LicenseNumber = null;

        /**
         * Full name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FullName = null;

        /**
         * Last name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Surname = null;

        /**
         * First name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.GivenName = null;

        /**
         * Birthday
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Birthday = null;

        /**
         * Gender (F-Female, M-Male)
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Sex = null;

        /**
         * Expiration date
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DateOfExpiration = null;

        /**
         * Issuing country
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.IssuingCountry = null;

        /**
         * Nationality code
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.NationalityCode = null;

        /**
         * The first line at the bottom, the MRZ Code sequence
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.PassportCodeFirst = null;

        /**
         * The second line at the bottom, the MRZ Code sequence
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.PassportCodeSecond = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LicenseNumber = 'LicenseNumber' in params ? params.LicenseNumber : null;
        this.FullName = 'FullName' in params ? params.FullName : null;
        this.Surname = 'Surname' in params ? params.Surname : null;
        this.GivenName = 'GivenName' in params ? params.GivenName : null;
        this.Birthday = 'Birthday' in params ? params.Birthday : null;
        this.Sex = 'Sex' in params ? params.Sex : null;
        this.DateOfExpiration = 'DateOfExpiration' in params ? params.DateOfExpiration : null;
        this.IssuingCountry = 'IssuingCountry' in params ? params.IssuingCountry : null;
        this.NationalityCode = 'NationalityCode' in params ? params.NationalityCode : null;
        this.PassportCodeFirst = 'PassportCodeFirst' in params ? params.PassportCodeFirst : null;
        this.PassportCodeSecond = 'PassportCodeSecond' in params ? params.PassportCodeSecond : null;

    }
}

/**
 * Nigeria driving license
 * @class
 */
class NigeriaDrivingLicense extends  AbstractModel {
    constructor(){
        super();

        /**
         * Last name.
Note: This field may return null, indicating that no valid values can be obtained.

         * @type {string || null}
         */
        this.LastName = null;

        /**
         * First name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FirstName = null;

        /**
         * License number.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LicenseNumber = null;

        /**
         * Age.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Age = null;

        /**
         * Birthday.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Birthday = null;

        /**
         * Issued country.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.IssuedCountry = null;

        /**
         * Expiration date.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ExpirationDate = null;

        /**
         * Issued date.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.IssuedDate = null;

        /**
         * Gender.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Sex = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LastName = 'LastName' in params ? params.LastName : null;
        this.FirstName = 'FirstName' in params ? params.FirstName : null;
        this.LicenseNumber = 'LicenseNumber' in params ? params.LicenseNumber : null;
        this.Age = 'Age' in params ? params.Age : null;
        this.Birthday = 'Birthday' in params ? params.Birthday : null;
        this.IssuedCountry = 'IssuedCountry' in params ? params.IssuedCountry : null;
        this.ExpirationDate = 'ExpirationDate' in params ? params.ExpirationDate : null;
        this.IssuedDate = 'IssuedDate' in params ? params.IssuedDate : null;
        this.Sex = 'Sex' in params ? params.Sex : null;

    }
}

/**
 * GetSdkVerificationResult response structure.
 * @class
 */
class GetSdkVerificationResultResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The result code of the verification result.
         * @type {string || null}
         */
        this.Result = null;

        /**
         * The verification result description.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * The charge count.
         * @type {number || null}
         */
        this.ChargeCount = null;

        /**
         * The results of multiple OCR processes (in order). The result of the final process is used as the valid result.
         * @type {Array.<CardVerifyResult> || null}
         */
        this.CardVerifyResults = null;

        /**
         * The results of multiple liveness detection processes (in order). The result of the final process is used as the valid result.
         * @type {Array.<CompareResult> || null}
         */
        this.CompareResults = null;

        /**
         * Data passed through in the process of getting the token.
         * @type {string || null}
         */
        this.Extra = null;

        /**
         * Describe the risk level of the device where the current request is located, with a total of 4 levels. The details are as follows:
1 - Secure
2 - Low Risk
3 - Medium Risk
4 - High Risk
Empty - Risk level not obtained.
Only returned for the ENHANCED version, with the default value being empty.
         * @type {string || null}
         */
        this.DeviceInfoLevel = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Result = 'Result' in params ? params.Result : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.ChargeCount = 'ChargeCount' in params ? params.ChargeCount : null;

        if (params.CardVerifyResults) {
            this.CardVerifyResults = new Array();
            for (let z in params.CardVerifyResults) {
                let obj = new CardVerifyResult();
                obj.deserialize(params.CardVerifyResults[z]);
                this.CardVerifyResults.push(obj);
            }
        }

        if (params.CompareResults) {
            this.CompareResults = new Array();
            for (let z in params.CompareResults) {
                let obj = new CompareResult();
                obj.deserialize(params.CompareResults[z]);
                this.CompareResults.push(obj);
            }
        }
        this.Extra = 'Extra' in params ? params.Extra : null;
        this.DeviceInfoLevel = 'DeviceInfoLevel' in params ? params.DeviceInfoLevel : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * GetSdkVerificationResult request structure.
 * @class
 */
class GetSdkVerificationResultRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The token used to identify an SDK-based verification process. 
         * @type {string || null}
         */
        this.SdkToken = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkToken = 'SdkToken' in params ? params.SdkToken : null;

    }
}

/**
 * DetectAIFakeFaces request structure.
 * @class
 */
class DetectAIFakeFacesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Enter the image or video with a face to be detected, in base64 encoding. Base64 value of the image: The overall image resolution is recommended to be 480x640, and the face size is 100X100 or larger; The image data size after Base64 encoding does not exceed 3M, and only supports jpg and png formats. Please use standard Base64 encoding (use = for padding). Refer to RFC4648 for encoding specifications. Base64 value of the video: The size after Base64 encoding does not exceed 8M, and supports mp4, avi, and flv formats. Please use standard Base64 encoding (use = for padding). Refer to RFC4648 for encoding specifications. The maximum supported video length is 20s, and the recommended length is 2 to 5s. The recommended video resolution is 480x640, and the frame rate is between 25fps and 30fps.
         * @type {string || null}
         */
        this.FaceInput = null;

        /**
         * The type of input is 1- The input type is a picture 2- The input type is a video Others - Return error code InvalidParameter
         * @type {number || null}
         */
        this.FaceInputType = null;

        /**
         * Whether the request information needs to be fully encrypted; Supported encryption algorithms: AES-256-CBC, SM4-GCM; Users with encryption requirements can use this parameter, for details, please click the link on the left.
         * @type {Encryption || null}
         */
        this.Encryption = null;

        /**
         * Encrypted ciphertext; The data format before encryption is as follows:{"FaceInput":"AAAAA","FaceInputType":1}
         * @type {string || null}
         */
        this.EncryptedBody = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FaceInput = 'FaceInput' in params ? params.FaceInput : null;
        this.FaceInputType = 'FaceInputType' in params ? params.FaceInputType : null;

        if (params.Encryption) {
            let obj = new Encryption();
            obj.deserialize(params.Encryption)
            this.Encryption = obj;
        }
        this.EncryptedBody = 'EncryptedBody' in params ? params.EncryptedBody : null;

    }
}

/**
 * Suspected attack detail
 * @class
 */
class AttackRiskDetail extends  AbstractModel {
    constructor(){
        super();

        /**
         * Suspected attack trace types
SuspectedSpoofingAttack: Suspected spoofing attack
 SuspectedSynthesisImage: Suspected synthesis image SuspectedSynthesisVideo: Suspected synthesis video SuspectedeAnomalyAttack: Suspected anomaly attack SuspectedAdversarialAttack: Suspected adversarial attack SuspectedBlackIndustry: Suspected batch generation attack
SuspectedWatermark: Suspected watermark
         * @type {string || null}
         */
        this.Type = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Type = 'Type' in params ? params.Type : null;

    }
}

/**
 * 
 * @class
 */
class ExtraInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * 
         * @type {Array.<RetrievalLivenessExtraInfo> || null}
         */
        this.RetrievalLivenessExtraInfo = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.RetrievalLivenessExtraInfo) {
            this.RetrievalLivenessExtraInfo = new Array();
            for (let z in params.RetrievalLivenessExtraInfo) {
                let obj = new RetrievalLivenessExtraInfo();
                obj.deserialize(params.RetrievalLivenessExtraInfo[z]);
                this.RetrievalLivenessExtraInfo.push(obj);
            }
        }

    }
}

/**
 * CreateUploadUrl response structure.
 * @class
 */
class CreateUploadUrlResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The URL for uploading contents with the `HTTP PUT` method.
         * @type {string || null}
         */
        this.UploadUrl = null;

        /**
         * The resource URL obtained after this upload is completed and to be passed in where it is required later.
         * @type {string || null}
         */
        this.ResourceUrl = null;

        /**
         * The point in time when the upload/download link expires, which is a 10-bit Unix timestamp.
         * @type {number || null}
         */
        this.ExpiredTimestamp = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UploadUrl = 'UploadUrl' in params ? params.UploadUrl : null;
        this.ResourceUrl = 'ResourceUrl' in params ? params.ResourceUrl : null;
        this.ExpiredTimestamp = 'ExpiredTimestamp' in params ? params.ExpiredTimestamp : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Malaysia ID card.
 * @class
 */
class NormalMLIDCard extends  AbstractModel {
    constructor(){
        super();

        /**
         * Full Name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FullName = null;

        /**
         * License number
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LicenseNumber = null;

        /**
         * Gender
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Sex = null;

        /**
         * Address
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FormattedAddress = null;

        /**
         * Lisence type
MyKad ID card
MyPR Permanent resident ID card
MyTentera Military ID card
MyKAS Temporary ID card
POLIS Police ID card
IKAD Labor ID card
MyKid Juvenile ID card
Example: MyKad
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Birthday (Currently, this filed only supports IKAD labor ID card and MyKad ID card)
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Birthday = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FullName = 'FullName' in params ? params.FullName : null;
        this.LicenseNumber = 'LicenseNumber' in params ? params.LicenseNumber : null;
        this.Sex = 'Sex' in params ? params.Sex : null;
        this.FormattedAddress = 'FormattedAddress' in params ? params.FormattedAddress : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.Birthday = 'Birthday' in params ? params.Birthday : null;

    }
}

/**
 * ApplyCardVerification response structure.
 * @class
 */
class ApplyCardVerificationResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The token used to identify an verification process. It can be used to get the verification result after the process is completed.
         * @type {string || null}
         */
        this.CardVerificationToken = null;

        /**
         * The maximum number of polls for calling the pull result interface polling.
         * @type {number || null}
         */
        this.AsyncCardVerificationMaxPollingTimes = null;

        /**
         * The interval for polling when calling the pull result interface (in seconds).
         * @type {number || null}
         */
        this.AsyncCardVerificationPollingWaitTime = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CardVerificationToken = 'CardVerificationToken' in params ? params.CardVerificationToken : null;
        this.AsyncCardVerificationMaxPollingTimes = 'AsyncCardVerificationMaxPollingTimes' in params ? params.AsyncCardVerificationMaxPollingTimes : null;
        this.AsyncCardVerificationPollingWaitTime = 'AsyncCardVerificationPollingWaitTime' in params ? params.AsyncCardVerificationPollingWaitTime : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DetectReflectLivenessAndCompare request structure.
 * @class
 */
class DetectReflectLivenessAndCompareRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * URL of the liveness detection data package generated by the SDK
         * @type {string || null}
         */
        this.LiveDataUrl = null;

        /**
         * MD5 hash value (32-bit) of the liveness detection data package generated by the SDK, which is used to verify the LiveData consistency.
         * @type {string || null}
         */
        this.LiveDataMd5 = null;

        /**
         * URL of the target image for comparison
         * @type {string || null}
         */
        this.ImageUrl = null;

        /**
         * MD5 hash value (32-bit) of the target image for comparison, which is used to verify the `Image` consistency.
         * @type {string || null}
         */
        this.ImageMd5 = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LiveDataUrl = 'LiveDataUrl' in params ? params.LiveDataUrl : null;
        this.LiveDataMd5 = 'LiveDataMd5' in params ? params.LiveDataMd5 : null;
        this.ImageUrl = 'ImageUrl' in params ? params.ImageUrl : null;
        this.ImageMd5 = 'ImageMd5' in params ? params.ImageMd5 : null;

    }
}

/**
 * GetFaceIdTokenIntl request structure.
 * @class
 */
class GetFaceIdTokenIntlRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The detection mode. Valid values:
`liveness`: Liveness detection only.
`compare`: Selfie Verification(liveness detection and face comparison).
Default value: `liveness`.
         * @type {string || null}
         */
        this.CheckMode = null;

        /**
         * The verification security level. Valid values:
`1`: Video-based liveness detection.
`2`: Motion-based liveness detection.
`3`: Reflection-based liveness detection.
`4`: Motion- and reflection-based liveness detection.
Default value: `4`.
         * @type {string || null}
         */
        this.SecureLevel = null;

        /**
         * The photo (in Base64) to compare. This parameter is required when the value of `CheckMode` is `compare`.
         * @type {string || null}
         */
        this.Image = null;

        /**
         * The pass-through parameter, which can be omitted if there are no special requirements.
         * @type {string || null}
         */
        this.Extra = null;

        /**
         * This interface is used to control th action sequences.
Action types are as follows:
"blink"
"mouth"
"nod"
"shake"
You can choose 1-2 actions out of the four.
Single action example: "blink"
Multiple action example: "blink,mouth"
The default value is blink. The different action types passed in this parameter take effect only when the SecurityLevel is 2 or 4; otherwise, the interface reports an error.
         * @type {string || null}
         */
        this.ActionList = null;

        /**
         * ENHANCED: Enhanced Version, BASIC: Basic Version (Default)
         * @type {string || null}
         */
        this.SdkVersion = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CheckMode = 'CheckMode' in params ? params.CheckMode : null;
        this.SecureLevel = 'SecureLevel' in params ? params.SecureLevel : null;
        this.Image = 'Image' in params ? params.Image : null;
        this.Extra = 'Extra' in params ? params.Extra : null;
        this.ActionList = 'ActionList' in params ? params.ActionList : null;
        this.SdkVersion = 'SdkVersion' in params ? params.SdkVersion : null;

    }
}

/**
 * Japan ID card.
 * @class
 */
class JapanIDCard extends  AbstractModel {
    constructor(){
        super();

        /**
         * Full name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FullName = null;

        /**
         * License number
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LicenseNumber = null;

        /**
         * Age
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Age = null;

        /**
         * Birthday
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Birthday = null;

        /**
         * Expire date
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ExpirationDate = null;

        /**
         * Address
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FormattedAddress = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FullName = 'FullName' in params ? params.FullName : null;
        this.LicenseNumber = 'LicenseNumber' in params ? params.LicenseNumber : null;
        this.Age = 'Age' in params ? params.Age : null;
        this.Birthday = 'Birthday' in params ? params.Birthday : null;
        this.ExpirationDate = 'ExpirationDate' in params ? params.ExpirationDate : null;
        this.FormattedAddress = 'FormattedAddress' in params ? params.FormattedAddress : null;

    }
}

/**
 * 
 * @class
 */
class EditDetail extends  AbstractModel {
    constructor(){
        super();

        /**
         * Modified Field Name
         * @type {string || null}
         */
        this.FieldName = null;

        /**
         * Value of the field before modification, the original OCR result
         * @type {string || null}
         */
        this.OriginalFieldValue = null;

        /**
         * Value of the field after modification,the user's manually entered result
         * @type {string || null}
         */
        this.RevisedFieldValue = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FieldName = 'FieldName' in params ? params.FieldName : null;
        this.OriginalFieldValue = 'OriginalFieldValue' in params ? params.OriginalFieldValue : null;
        this.RevisedFieldValue = 'RevisedFieldValue' in params ? params.RevisedFieldValue : null;

    }
}

/**
 * ApplyWebVerificationToken response structure.
 * @class
 */
class ApplyWebVerificationTokenResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The verification URL to be opened with a browser to start the verification process.
         * @type {string || null}
         */
        this.VerificationUrl = null;

        /**
         * The token used to identify a web-based verification process. It is valid for 7,200s and can be used to get the verification result after the process is completed.
         * @type {string || null}
         */
        this.BizToken = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VerificationUrl = 'VerificationUrl' in params ? params.VerificationUrl : null;
        this.BizToken = 'BizToken' in params ? params.BizToken : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Hong Kong (China) ID card.
 * @class
 */
class NormalHKIDCard extends  AbstractModel {
    constructor(){
        super();

        /**
         * Chinese name
Note: This field may return null, indicating that no valid values can be obtained.

         * @type {string || null}
         */
        this.ChineseName = null;

        /**
         * English name
Note: This field may return null, indicating that no valid values can be obtained.
Example: SAN, Nan
         * @type {string || null}
         */
        this.FullName = null;

        /**
         * Telex code correspondint to the Chinese name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.RegistrationNumber = null;

        /**
         * Gender: "Male-M" or "Female-F"
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Sex = null;

        /**
         * Birthday
Note: This field may return null, indicating that no valid values can be obtained.
Example: 01-01-2001
         * @type {string || null}
         */
        this.Birthday = null;

        /**
         * Permanent resident ID card: 0-non-permanent; 1-permanent; -1-unknown
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Permanent = null;

        /**
         * ID card number
Note: This field may return null, indicating that no valid values can be obtained.
Example: C000000(E)
         * @type {string || null}
         */
        this.LicenseNumber = null;

        /**
         * Lisence symbol, which is the symbol below Birthday. Example: "***AZ"
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Symbol = null;

        /**
         * The first date of issue
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.IssuedDate = null;

        /**
         * The current date of issue
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CurrentIssueDate = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ChineseName = 'ChineseName' in params ? params.ChineseName : null;
        this.FullName = 'FullName' in params ? params.FullName : null;
        this.RegistrationNumber = 'RegistrationNumber' in params ? params.RegistrationNumber : null;
        this.Sex = 'Sex' in params ? params.Sex : null;
        this.Birthday = 'Birthday' in params ? params.Birthday : null;
        this.Permanent = 'Permanent' in params ? params.Permanent : null;
        this.LicenseNumber = 'LicenseNumber' in params ? params.LicenseNumber : null;
        this.Symbol = 'Symbol' in params ? params.Symbol : null;
        this.IssuedDate = 'IssuedDate' in params ? params.IssuedDate : null;
        this.CurrentIssueDate = 'CurrentIssueDate' in params ? params.CurrentIssueDate : null;

    }
}

/**
 * GetWebVerificationResult request structure.
 * @class
 */
class GetWebVerificationResultRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The token for the web-based verification, which is generated with the `ApplyWebVerificationToken` API.
         * @type {string || null}
         */
        this.BizToken = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.BizToken = 'BizToken' in params ? params.BizToken : null;

    }
}

/**
 * Thailand ID Card
 * @class
 */
class ThailandIDCard extends  AbstractModel {
    constructor(){
        super();

        /**
         * Last name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LastName = null;

        /**
         * First name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FirstName = null;

        /**
         * License number
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LicenseNumber = null;

        /**
         * Birthday
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DateOfBirth = null;

        /**
         * Date of expiry
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DateOfExpiry = null;

        /**
         * Date of issue
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DateOfIssue = null;

        /**
         * Issuing country
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.IssuedCountry = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LastName = 'LastName' in params ? params.LastName : null;
        this.FirstName = 'FirstName' in params ? params.FirstName : null;
        this.LicenseNumber = 'LicenseNumber' in params ? params.LicenseNumber : null;
        this.DateOfBirth = 'DateOfBirth' in params ? params.DateOfBirth : null;
        this.DateOfExpiry = 'DateOfExpiry' in params ? params.DateOfExpiry : null;
        this.DateOfIssue = 'DateOfIssue' in params ? params.DateOfIssue : null;
        this.IssuedCountry = 'IssuedCountry' in params ? params.IssuedCountry : null;

    }
}

/**
 * The details of the verification process.
 * @class
 */
class VerificationDetail extends  AbstractModel {
    constructor(){
        super();

        /**
         * The final result of this verification. `0` indicates that the person is the same as that in the photo.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ErrorCode = null;

        /**
         * The description of the final verification result.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The result of this liveness detection process. `0` indicates success.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.LivenessErrorCode = null;

        /**
         * The result description of this liveness detection process.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LivenessErrorMsg = null;

        /**
         * The result of this comparison process. `0` indicates that the person in the best face screenshot collected from the video stream is the same as that in the uploaded image for comparison.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.CompareErrorCode = null;

        /**
         * The result description of this comparison process.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CompareErrorMsg = null;

        /**
         * The timestamp (ms) of this verification process.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ReqTimestamp = null;

        /**
         * The similarity of the best face screenshot collected from the video stream and the uploaded image for comparison in this verification process. Value range: [0.00, 100.00]. By default, the person in the screenshot is determined to be the same person in the image if the similarity is greater than or equal to 70.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Similarity = null;

        /**
         * Unique ID of this verification process.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Seq = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ErrorCode = 'ErrorCode' in params ? params.ErrorCode : null;
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.LivenessErrorCode = 'LivenessErrorCode' in params ? params.LivenessErrorCode : null;
        this.LivenessErrorMsg = 'LivenessErrorMsg' in params ? params.LivenessErrorMsg : null;
        this.CompareErrorCode = 'CompareErrorCode' in params ? params.CompareErrorCode : null;
        this.CompareErrorMsg = 'CompareErrorMsg' in params ? params.CompareErrorMsg : null;
        this.ReqTimestamp = 'ReqTimestamp' in params ? params.ReqTimestamp : null;
        this.Similarity = 'Similarity' in params ? params.Similarity : null;
        this.Seq = 'Seq' in params ? params.Seq : null;

    }
}

/**
 * GetWebVerificationResultIntl response structure.
 * @class
 */
class GetWebVerificationResultIntlResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The final result of this verification. `0` indicates that the person is the same as that in the photo.
For other error codes, see <a href="https://www.tencentcloud.com/document/product/1061/55390?lang=en&pg=#8a960e1e-39c0-42cb-b181-b3164d77f81e">Selfie Verification (Mobile HTML5) Error Codes</a>
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ErrorCode = null;

        /**
         * The description of the final verification result.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The detailed verification result list of this process. Retries are allowed, so a verification process may have several entries of results.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<VerificationDetail> || null}
         */
        this.VerificationDetailList = null;

        /**
         * The Base64-encoded string of the video collected from the video stream. Retries are allowed, and this field returns only the data collected in the last verification. If no video is collected, null is returned.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.VideoBase64 = null;

        /**
         * The Base64-encoded string of the best face screenshot collected from the video stream. Retries are allowed, and this field returns only the data collected in the last verification. If no best face screenshot is collected, null is returned.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.BestFrameBase64 = null;

        /**
         * Card recognize result.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<OCRResult> || null}
         */
        this.OCRResult = null;

        /**
         * The passthrough parameter of the business, max 1,000 characters, which will be returned in GetWebVerificationResultIntl.
         * @type {string || null}
         */
        this.Extra = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ErrorCode = 'ErrorCode' in params ? params.ErrorCode : null;
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;

        if (params.VerificationDetailList) {
            this.VerificationDetailList = new Array();
            for (let z in params.VerificationDetailList) {
                let obj = new VerificationDetail();
                obj.deserialize(params.VerificationDetailList[z]);
                this.VerificationDetailList.push(obj);
            }
        }
        this.VideoBase64 = 'VideoBase64' in params ? params.VideoBase64 : null;
        this.BestFrameBase64 = 'BestFrameBase64' in params ? params.BestFrameBase64 : null;

        if (params.OCRResult) {
            this.OCRResult = new Array();
            for (let z in params.OCRResult) {
                let obj = new OCRResult();
                obj.deserialize(params.OCRResult[z]);
                this.OCRResult.push(obj);
            }
        }
        this.Extra = 'Extra' in params ? params.Extra : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * The description of a file, including a download URL and the MD5 checksum and size of the file.
 * @class
 */
class FileInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * The URL for downloading the file
         * @type {string || null}
         */
        this.Url = null;

        /**
         * The 32-bit MD5 checksum of the file
         * @type {string || null}
         */
        this.MD5 = null;

        /**
         * The file size
         * @type {number || null}
         */
        this.Size = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Url = 'Url' in params ? params.Url : null;
        this.MD5 = 'MD5' in params ? params.MD5 : null;
        this.Size = 'Size' in params ? params.Size : null;

    }
}

/**
 * Hong Kong (China) ID card.
 * @class
 */
class HKIDCard extends  AbstractModel {
    constructor(){
        super();

        /**
         * Chinese name
Note: This field may return null, indicating that no valid values can be obtained.
Example:  SAN, Nan
         * @type {string || null}
         */
        this.CnName = null;

        /**
         * English name
Note: This field may return null, indicating that no valid values can be obtained.
Example: SAN, Nan
         * @type {string || null}
         */
        this.EnName = null;

        /**
         * Telex code correspondint to the Chinese name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TelexCode = null;

        /**
         * Gender: "Male-M" or "Female-F"
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Sex = null;

        /**
         * Birthday
Note: This field may return null, indicating that no valid values can be obtained.
Example: 01-01-2001
         * @type {string || null}
         */
        this.Birthday = null;

        /**
         * Permanent resident ID card: 0-non-permanent; 1-permanent; -1-unknown
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Permanent = null;

        /**
         * ID card number
Note: This field may return null, indicating that no valid values can be obtained.
Example: C000000(E)
         * @type {string || null}
         */
        this.IdNum = null;

        /**
         * Lisence symbol, which is the symbol below Birthday. Example: "***AZ"
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Symbol = null;

        /**
         * The first date of issue
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FirstIssueDate = null;

        /**
         * The current date of issue
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CurrentIssueDate = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CnName = 'CnName' in params ? params.CnName : null;
        this.EnName = 'EnName' in params ? params.EnName : null;
        this.TelexCode = 'TelexCode' in params ? params.TelexCode : null;
        this.Sex = 'Sex' in params ? params.Sex : null;
        this.Birthday = 'Birthday' in params ? params.Birthday : null;
        this.Permanent = 'Permanent' in params ? params.Permanent : null;
        this.IdNum = 'IdNum' in params ? params.IdNum : null;
        this.Symbol = 'Symbol' in params ? params.Symbol : null;
        this.FirstIssueDate = 'FirstIssueDate' in params ? params.FirstIssueDate : null;
        this.CurrentIssueDate = 'CurrentIssueDate' in params ? params.CurrentIssueDate : null;

    }
}

/**
 * Singapore ID Card
 * @class
 */
class SingaporeIDCard extends  AbstractModel {
    constructor(){
        super();

        /**
         * Chinese name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ChName = null;

        /**
         * Chinese name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ChineseName = null;

        /**
         * English name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.EnName = null;

        /**
         * English name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FullName = null;

        /**
         * License number
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ID = null;

        /**
         * License number
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LicenseNumber = null;

        /**
         * Gender
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Sex = null;

        /**
         * Country of birth
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CountryOfBirth = null;

        /**
         * Nationality
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Nationality = null;

        /**
         * Birthday
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Birthday = null;

        /**
         * Address (on the back)
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Address = null;

        /**
         * Race (on the back)
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Race = null;

        /**
         *  NRIC number (on the back)
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.NRICCode = null;

        /**
         * Post number (on the front)
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.PostCode = null;

        /**
         * Date of expiry (on the back)
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DateOfExpiration = null;

        /**
         * Date of issue (on the back)
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DateOfIssue = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ChName = 'ChName' in params ? params.ChName : null;
        this.ChineseName = 'ChineseName' in params ? params.ChineseName : null;
        this.EnName = 'EnName' in params ? params.EnName : null;
        this.FullName = 'FullName' in params ? params.FullName : null;
        this.ID = 'ID' in params ? params.ID : null;
        this.LicenseNumber = 'LicenseNumber' in params ? params.LicenseNumber : null;
        this.Sex = 'Sex' in params ? params.Sex : null;
        this.CountryOfBirth = 'CountryOfBirth' in params ? params.CountryOfBirth : null;
        this.Nationality = 'Nationality' in params ? params.Nationality : null;
        this.Birthday = 'Birthday' in params ? params.Birthday : null;
        this.Address = 'Address' in params ? params.Address : null;
        this.Race = 'Race' in params ? params.Race : null;
        this.NRICCode = 'NRICCode' in params ? params.NRICCode : null;
        this.PostCode = 'PostCode' in params ? params.PostCode : null;
        this.DateOfExpiration = 'DateOfExpiration' in params ? params.DateOfExpiration : null;
        this.DateOfIssue = 'DateOfIssue' in params ? params.DateOfIssue : null;

    }
}

/**
 * Indonesia driving license.
 * @class
 */
class IndonesiaDrivingLicense extends  AbstractModel {
    constructor(){
        super();

        /**
         * Last name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LastName = null;

        /**
         * First name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FirstName = null;

        /**
         * License number
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LicenseNumber = null;

        /**
         * Birthday
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Birthday = null;

        /**
         * Address
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Address = null;

        /**
         * Expiration date
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ExpirationDate = null;

        /**
         * Date of issue
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.IssuedDate = null;

        /**
         * Issuing country
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.IssuedCountry = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LastName = 'LastName' in params ? params.LastName : null;
        this.FirstName = 'FirstName' in params ? params.FirstName : null;
        this.LicenseNumber = 'LicenseNumber' in params ? params.LicenseNumber : null;
        this.Birthday = 'Birthday' in params ? params.Birthday : null;
        this.Address = 'Address' in params ? params.Address : null;
        this.ExpirationDate = 'ExpirationDate' in params ? params.ExpirationDate : null;
        this.IssuedDate = 'IssuedDate' in params ? params.IssuedDate : null;
        this.IssuedCountry = 'IssuedCountry' in params ? params.IssuedCountry : null;

    }
}

/**
 * GetFaceIdResultIntl request structure.
 * @class
 */
class GetFaceIdResultIntlRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the SDK-based selfie verification process, which is generated when the `GetFaceIdTokenIntl` API is called.	
         * @type {string || null}
         */
        this.SdkToken = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkToken = 'SdkToken' in params ? params.SdkToken : null;

    }
}

/**
 * License OCR result
 * @class
 */
class NormalCardInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Hong Kong (China) ID Card
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {NormalHKIDCard || null}
         */
        this.HKIDCard = null;

        /**
         * Malaysia ID Card
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {NormalMLIDCard || null}
         */
        this.MLIDCard = null;

        /**
         * Philippines VoteID Card
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {PhilippinesVoteID || null}
         */
        this.PhilippinesVoteID = null;

        /**
         * Indonesia ID Card
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {NormalIndonesiaIDCard || null}
         */
        this.IndonesiaIDCard = null;

        /**
         * Philippines Driving License
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {PhilippinesDrivingLicense || null}
         */
        this.PhilippinesDrivingLicense = null;

        /**
         * Philippines TinID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {PhilippinesTinID || null}
         */
        this.PhilippinesTinID = null;

        /**
         * Philippines SSSID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {PhilippinesSSSID || null}
         */
        this.PhilippinesSSSID = null;

        /**
         * Philippines UMID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {PhilippinesUMID || null}
         */
        this.PhilippinesUMID = null;

        /**
         * ID Cards of Hong Kong (China), Macao (China) and Taiwan (China), and International Passport
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {InternationalIDPassport || null}
         */
        this.InternationalIDPassport = null;

        /**
         * General license information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {GeneralCard || null}
         */
        this.GeneralCard = null;

        /**
         * Indonesia Driving License
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {IndonesiaDrivingLicense || null}
         */
        this.IndonesiaDrivingLicense = null;

        /**
         * Thailand ID Card
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {NormalThailandIDCard || null}
         */
        this.ThailandIDCard = null;

        /**
         * Singapore ID Card
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {SingaporeIDCard || null}
         */
        this.SingaporeIDCard = null;

        /**
         * Macao (China) ID Card
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {MacaoIDCard || null}
         */
        this.MacaoIDCard = null;

        /**
         * Mainland (China) ID Card
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {MainlandIDCard || null}
         */
        this.MainlandIDCard = null;

        /**
         * Japan ID Card
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {JapanIDCard || null}
         */
        this.JapanIDCard = null;

        /**
         * Taiwan (China) ID Card
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {TaiWanIDCard || null}
         */
        this.TaiWanIDCard = null;

        /**
         * exit/entry permit (card) for traveling to and from Hong Kong (China), Macao (China), or Taiwan (China).
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {HMTPermit || null}
         */
        this.HMTPermitCard = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.HKIDCard) {
            let obj = new NormalHKIDCard();
            obj.deserialize(params.HKIDCard)
            this.HKIDCard = obj;
        }

        if (params.MLIDCard) {
            let obj = new NormalMLIDCard();
            obj.deserialize(params.MLIDCard)
            this.MLIDCard = obj;
        }

        if (params.PhilippinesVoteID) {
            let obj = new PhilippinesVoteID();
            obj.deserialize(params.PhilippinesVoteID)
            this.PhilippinesVoteID = obj;
        }

        if (params.IndonesiaIDCard) {
            let obj = new NormalIndonesiaIDCard();
            obj.deserialize(params.IndonesiaIDCard)
            this.IndonesiaIDCard = obj;
        }

        if (params.PhilippinesDrivingLicense) {
            let obj = new PhilippinesDrivingLicense();
            obj.deserialize(params.PhilippinesDrivingLicense)
            this.PhilippinesDrivingLicense = obj;
        }

        if (params.PhilippinesTinID) {
            let obj = new PhilippinesTinID();
            obj.deserialize(params.PhilippinesTinID)
            this.PhilippinesTinID = obj;
        }

        if (params.PhilippinesSSSID) {
            let obj = new PhilippinesSSSID();
            obj.deserialize(params.PhilippinesSSSID)
            this.PhilippinesSSSID = obj;
        }

        if (params.PhilippinesUMID) {
            let obj = new PhilippinesUMID();
            obj.deserialize(params.PhilippinesUMID)
            this.PhilippinesUMID = obj;
        }

        if (params.InternationalIDPassport) {
            let obj = new InternationalIDPassport();
            obj.deserialize(params.InternationalIDPassport)
            this.InternationalIDPassport = obj;
        }

        if (params.GeneralCard) {
            let obj = new GeneralCard();
            obj.deserialize(params.GeneralCard)
            this.GeneralCard = obj;
        }

        if (params.IndonesiaDrivingLicense) {
            let obj = new IndonesiaDrivingLicense();
            obj.deserialize(params.IndonesiaDrivingLicense)
            this.IndonesiaDrivingLicense = obj;
        }

        if (params.ThailandIDCard) {
            let obj = new NormalThailandIDCard();
            obj.deserialize(params.ThailandIDCard)
            this.ThailandIDCard = obj;
        }

        if (params.SingaporeIDCard) {
            let obj = new SingaporeIDCard();
            obj.deserialize(params.SingaporeIDCard)
            this.SingaporeIDCard = obj;
        }

        if (params.MacaoIDCard) {
            let obj = new MacaoIDCard();
            obj.deserialize(params.MacaoIDCard)
            this.MacaoIDCard = obj;
        }

        if (params.MainlandIDCard) {
            let obj = new MainlandIDCard();
            obj.deserialize(params.MainlandIDCard)
            this.MainlandIDCard = obj;
        }

        if (params.JapanIDCard) {
            let obj = new JapanIDCard();
            obj.deserialize(params.JapanIDCard)
            this.JapanIDCard = obj;
        }

        if (params.TaiWanIDCard) {
            let obj = new TaiWanIDCard();
            obj.deserialize(params.TaiWanIDCard)
            this.TaiWanIDCard = obj;
        }

        if (params.HMTPermitCard) {
            let obj = new HMTPermit();
            obj.deserialize(params.HMTPermitCard)
            this.HMTPermitCard = obj;
        }

    }
}

/**
 * GetFaceIdResultIntl response structure.
 * @class
 */
class GetFaceIdResultIntlResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The return code of the verification result.
0: Succeeded.
1001: System error.
1004: Selfie verification comparison failed.
2004: The image passed in is too large or too small.
2012: Several faces were detected.
2013: No face was detected, or the face detected was incomplete.
2014: The image resolution is too low or the quality does not meet the requirements.
2015: Face comparison failed.
2016: The similarity did not reach the standard passing threshold.
-999: The verification process wasn't finished.
         * @type {string || null}
         */
        this.Result = null;

        /**
         * The description of the verification result.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * The best frame screenshot (in Base64) obtained during the verification.
         * @type {string || null}
         */
        this.BestFrame = null;

        /**
         * The video file (Base64) for verification.Used for verification, contains specific color reflection effects.
         * @type {string || null}
         */
        this.Video = null;

        /**
         * Records the specific action performed by the user, used for AI Face Shield analysis.
         * @type {string || null}
         */
        this.ActionVideo = null;

        /**
         * The similarity, with a value range of 0-100. A greater value indicates higher similarity. This parameter is returned only in the `compare` (selfie verification) mode.
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Similarity = null;

        /**
         * The pass-through parameter.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Extra = null;

        /**
         * Describe the risk level of the device where the current request is located, with a total of 4 levels. The details are as follows:
1 - Secure
2 - Low Risk
3 - Medium Risk
4 - High Risk
Empty - Risk level not obtained.
Only returned for the ENHANCED version, with the default value being empty.
         * @type {string || null}
         */
        this.DeviceInfoLevel = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Result = 'Result' in params ? params.Result : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.BestFrame = 'BestFrame' in params ? params.BestFrame : null;
        this.Video = 'Video' in params ? params.Video : null;
        this.ActionVideo = 'ActionVideo' in params ? params.ActionVideo : null;
        this.Similarity = 'Similarity' in params ? params.Similarity : null;
        this.Extra = 'Extra' in params ? params.Extra : null;
        this.DeviceInfoLevel = 'DeviceInfoLevel' in params ? params.DeviceInfoLevel : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ApplySdkVerificationToken request structure.
 * @class
 */
class ApplySdkVerificationTokenRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The verification mode. Valid values:
1: OCR + liveness detection + face comparison
2: Liveness detection + face comparison
3: Liveness detection
Default value: 1
         * @type {number || null}
         */
        this.CheckMode = null;

        /**
         * The security level of the verification. Valid values:
1: Video-based liveness detection
2: Motion-based liveness detection
3: Reflection-based liveness detection
4: Motion- and reflection-based liveness detection
Default value: 4
         * @type {number || null}
         */
        this.SecurityLevel = null;

        /**
         * Specifies the identity document type used for authentication. valid values:.  

HK (default): hong kong (china) identity card.
2. ML: malaysian identity card.
Indonesian identity card.
4. PhilippinesVoteID: specifies the voter card in the philippines.
5. PhilippinesDrivingLicense: specifies the driving license in philippines.
6. PhilippinesTinID: specifies the philippines tin id.
7. PhilippinesSSSID: specifies the SSSID in the philippines.
8. philippines UMID: specifies the philippines UMID.
9. MLIDPassport: specifies the passport for hong kong (china), macao (china), and taiwan (china) as well as overseas passports.
ThailandIDCard: specifies the thai identity card.
Mainland id card.
12. SingaporeIDCard: specifies the Singapore id card.
13. HMTPermit: specifies the hong kong, macau and taiwan travel permit.
         * @type {string || null}
         */
        this.IdCardType = null;

        /**
         * The Base64-encoded value of the photo to compare, which is required only when `CheckMode` is set to `2`.
         * @type {string || null}
         */
        this.CompareImage = null;

        /**
         * Whether ID card authentication is required. If not, only document OCR will be performed. Currently, authentication is available only when the value of `IdCardType` is `HK`.
         * @type {boolean || null}
         */
        this.NeedVerifyIdCard = null;

        /**
         * Whether to forbid the modification of the OCR result by users. Default value: `false` (modification allowed). (Currently, this parameter is not applied.)
         * @type {boolean || null}
         */
        this.DisableChangeOcrResult = null;

        /**
         * Whether to disable the OCR warnings. Default value: `false` (not disable), where OCR warnings are enabled and the OCR result will not be returned if there is a warning.
This feature applies only to Hong Kong (China) identity cards, Malaysian identity cards, and passports.
         * @type {boolean || null}
         */
        this.DisableCheckOcrWarnings = null;

        /**
         * Customize which alarm codes to block. If left blank, all alarm codes will be blocked by default.
Optional alarm codes are: -9101 (occlusion or incomplete border), -9102 (photocopying), -9103 (screen capture by camera), -9104 (image editing/PS modification), -9107 (glare/reflection), -9108 (blurriness), -9901 (other alarms).
         * @type {Array.<number> || null}
         */
        this.SelectedWarningCodes = null;

        /**
         * A passthrough field, which is returned together with the verification result and can contain up to 1,024 bits.
         * @type {string || null}
         */
        this.Extra = null;

        /**
         * ENHANCED: enhanced.
BASIC: basic version (default).
         * @type {string || null}
         */
        this.SdkVersion = null;

        /**
         * This interface is used to control th action sequences.
Action types are as follows:
"blink"
"mouth"
"nod"
"shake"
You can choose 1-2 actions out of the four.
Single action example: "blink"
Multiple action example: "blink,mouth"
The default value is blink. The different action types passed in this parameter take effect only when the SecurityLevel is 2 or 4; otherwise, the interface reports an error.
         * @type {string || null}
         */
        this.ActionList = null;

        /**
         * Whether expired identity documents are permitted to proceed to the liveness detection process. This parameter only takes effect when the document type is Hong Kong Identity Card (HKID).
true (default value): Expired HKID is allowed to enter the liveness process.
false : Expired HKID is rejected and cannot enter the liveness process.
         * @type {boolean || null}
         */
        this.AllowExpiredDocument = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CheckMode = 'CheckMode' in params ? params.CheckMode : null;
        this.SecurityLevel = 'SecurityLevel' in params ? params.SecurityLevel : null;
        this.IdCardType = 'IdCardType' in params ? params.IdCardType : null;
        this.CompareImage = 'CompareImage' in params ? params.CompareImage : null;
        this.NeedVerifyIdCard = 'NeedVerifyIdCard' in params ? params.NeedVerifyIdCard : null;
        this.DisableChangeOcrResult = 'DisableChangeOcrResult' in params ? params.DisableChangeOcrResult : null;
        this.DisableCheckOcrWarnings = 'DisableCheckOcrWarnings' in params ? params.DisableCheckOcrWarnings : null;
        this.SelectedWarningCodes = 'SelectedWarningCodes' in params ? params.SelectedWarningCodes : null;
        this.Extra = 'Extra' in params ? params.Extra : null;
        this.SdkVersion = 'SdkVersion' in params ? params.SdkVersion : null;
        this.ActionList = 'ActionList' in params ? params.ActionList : null;
        this.AllowExpiredDocument = 'AllowExpiredDocument' in params ? params.AllowExpiredDocument : null;

    }
}

/**
 * GenerateReflectSequence request structure.
 * @class
 */
class GenerateReflectSequenceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The resource URL of the data package generated by the SDK.
         * @type {string || null}
         */
        this.DeviceDataUrl = null;

        /**
         * The MD5 hash value of the data package generated by the SDK.
         * @type {string || null}
         */
        this.DeviceDataMd5 = null;

        /**
         * 1 - silent
2 - blinking
3 - light
4 - blinking + light (default)
         * @type {string || null}
         */
        this.SecurityLevel = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DeviceDataUrl = 'DeviceDataUrl' in params ? params.DeviceDataUrl : null;
        this.DeviceDataMd5 = 'DeviceDataMd5' in params ? params.DeviceDataMd5 : null;
        this.SecurityLevel = 'SecurityLevel' in params ? params.SecurityLevel : null;

    }
}

/**
 * Bangladesh ID card
 * @class
 */
class BangladeshIDCard extends  AbstractModel {
    constructor(){
        super();

        /**
         * Last name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LastName = null;

        /**
         * First name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FirstName = null;

        /**
         * License number.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LicenseNumber = null;

        /**
         * Age.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Age = null;

        /**
         * Birthday.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Birthday = null;

        /**
         * Issued country.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.IssuedCountry = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LastName = 'LastName' in params ? params.LastName : null;
        this.FirstName = 'FirstName' in params ? params.FirstName : null;
        this.LicenseNumber = 'LicenseNumber' in params ? params.LicenseNumber : null;
        this.Age = 'Age' in params ? params.Age : null;
        this.Birthday = 'Birthday' in params ? params.Birthday : null;
        this.IssuedCountry = 'IssuedCountry' in params ? params.IssuedCountry : null;

    }
}

/**
 * VideoLivenessCompare response structure.
 * @class
 */
class VideoLivenessCompareResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The similarity. Value range: [0.00, 100.00]. As a recommendation, when the similarity is greater than or equal to 70, it can be determined that the two persons are of the same person. You can adjust the threshold according to your specific scenario (the FARs at the thresholds of 70 and 80 are 0.1% and 0.01%, respectively).
         * @type {number || null}
         */
        this.Sim = null;

        /**
         * The service error code. `Success` will be returned for success. For error information, see the `FailedOperation` section in the error code list below.
         * @type {string || null}
         */
        this.Result = null;

        /**
         * The service result description
         * @type {string || null}
         */
        this.Description = null;

        /**
         * The best video screenshot after successful verification
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {FileInfo || null}
         */
        this.BestFrame = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Sim = 'Sim' in params ? params.Sim : null;
        this.Result = 'Result' in params ? params.Result : null;
        this.Description = 'Description' in params ? params.Description : null;

        if (params.BestFrame) {
            let obj = new FileInfo();
            obj.deserialize(params.BestFrame)
            this.BestFrame = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Philippines SSSID Card
 * @class
 */
class PhilippinesSSSID extends  AbstractModel {
    constructor(){
        super();

        /**
         * License number
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LicenseNumber = null;

        /**
         * Full name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FullName = null;

        /**
         * Birthday
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Birthday = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LicenseNumber = 'LicenseNumber' in params ? params.LicenseNumber : null;
        this.FullName = 'FullName' in params ? params.FullName : null;
        this.Birthday = 'Birthday' in params ? params.Birthday : null;

    }
}

/**
 * The OCR result of a user's identity document during the eKYC verification process.
 * @class
 */
class CardVerifyResult extends  AbstractModel {
    constructor(){
        super();

        /**
         * Whether the authentication or OCR process is successful.
         * @type {boolean || null}
         */
        this.IsPass = null;

        /**
         * Whether the user modified the card recognition result
         * @type {boolean || null}
         */
        this.IsEdit = null;

        /**
         * The download URL of the video used for identity document verification, which is valid for 10 minutes. This parameter is returned only if video-based identity document verification is enabled.
Note: This field may return null, indicating that no valid value can be obtained.
         * @type {FileInfo || null}
         */
        this.CardVideo = null;

        /**
         * The download URL of the identity document image, which is valid for 10 minutes.
Note: This field may return null, indicating that no valid value can be obtained.
         * @type {FileInfo || null}
         */
        this.CardImage = null;

        /**
         * The OCR result (in JSON) of the identity document image. If verification or OCR fails, this parameter is left empty. The URL is valid for 10 minutes.
(1) Hong Kong (China) identity card
When the value of `IdCardType` is `HK`:
- CnName (string): Name in Chinese.
- EnName (string): Name in English.
- TelexCode (string): The code corresponding to the name in Chinese.
- Sex (string): Gender. Valid values: `M` (male) and `F` (female).
- Birthday (string): Date of birth.
- Permanent (int): Whether it is a permanent residence identity card. Valid values: `0` (non-permanent), `1` (permanent), and `-1` (unknown).
- IdNum (string): Identity card number.
- Symbol (string): The ID symbol below the date of birth, such as "***AZ".
- FirstIssueDate (string): Month and year of first registration.
- CurrentIssueDate (string): The date of latest issuance.

(2) Malaysian identity card
When the value of `IdCardType` is `ML`:
- Sex (string): Gender. Valid values: `LELAKI` (male) and `PEREMPUAN` (female).
- Birthday (string): Date of birth.
- ID (string): Identity card number.
- Name (string): Name.
- Address (string): Address.
- Type (string): Identity document type.

(3) Philippine identity document
When the value of `IdCardType` is `PhilippinesVoteID`:
- Birthday (string): Date of birth.
- Address (string): Address.
- LastName (string): Last name.
- FirstName (string): First name.
- VIN (string): Voter's identification number (VIN).
- CivilStatus (string): Civil status.
- Citizenship (string): Citizenship.
- PrecinctNo (string): Precinct.

When the value of `IdCardType` is `PhilippinesDrivingLicense`:
- Sex (string): Gender.
- Birthday (string): Date of birth.
- Name (string): Name.
- Address (string): Address.
- LastName (string): Last name.
- FirstName (string): First name.
- MiddleName (string): Middle name.
- Nationality (string): Nationality.
- LicenseNo (string): License number.
- ExpiresDate (string): Expiration date.
- AgencyCode (string): Agency code.

When the value of `IdCardType` is `PhilippinesTinID`:
- LicenseNumber (string): Tax identification number (TIN).
- FullName (string): Full name.
- Address (string): Address.
- Birthday (string): Date of birth.
- IssueDate (string): Issue date.

When the value of `IdCardType` is `PhilippinesSSSID`:
- LicenseNumber (string): Common reference number (CRN).
- FullName (string): Full name.
- Birthday (string): Date of birth.

When the value of `IdCardType` is `PhilippinesUMID`:
- Surname (string): Surname.
- MiddleName (string):Middle name.
- GivenName (string): Given name.
- Sex (string): Gender.
- Birthday (string): Date of birth.
- Address (string): Address.
- CRN (string): Common reference number (CRN).

(4) Indonesian identity card
When the value of `IdCardType` is `IndonesiaIDCard`:
- NIK (string): Single Identity Number.
- Nama (string): Full name.
- TempatTglLahir (string): Place and date of birth.
- JenisKelamin (string): Gender.
- GolDarah (string): Blood type.
- Alamat (string): Address.
- RTRW (string): Street.
- KelDesa (string): Village.
- Kecamatan (string): Region.
- Agama (string): Religion.
- StatusPerkawinan (string): Marital status.
- Perkerjaan (string): Occupation.
- KewargaNegaraan (string): Nationality.
- BerlakuHingga (string): Expiry date.
- IssuedDate (string): Issue date.

(5) A passport issued in Hong Kong (China) /Macao (China) /Taiwan (China) or other countries/regions
When the value of `IdCardType` is `MLIDPassport`:
- FullName (string): Full name.
- Surname (string): Surname.
- GivenName (string): Given name.
- Birthday (string): Date of birth.
- Sex (string): Gender. Valid values: `F` (female) and `M` (male).
- DateOfExpiration (string): Expiration date.
- IssuingCountry (string): Issuing country.
- NationalityCode (string): Country/region code.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {FileInfo || null}
         */
        this.CardInfoOcrJson = null;

        /**
         * The request ID of a single process.
         * @type {string || null}
         */
        this.RequestId = null;

        /**
         * The recognition results of ID card
         * @type {CardInfo || null}
         */
        this.CardInfo = null;

        /**
         * License OCR result
         * @type {NormalCardInfo || null}
         */
        this.NormalCardInfo = null;

        /**
         * Card warning information
-9101 Alarm for covered certificate,
-9102 Alarm for photocopied certificate,
-9103 Alarm for photographed certificate,
-9107 Alarm for reflective certificate,
-9108 Alarm for blurry image,
-9109 This capability is not enabled.
         * @type {Array.<number> || null}
         */
        this.WarnCardInfos = null;

        /**
         * Details of the OCR modifications for this EKYC card, when the user manually modifies the card recognition results (IsEdit=true), EditDetails will return the modified fields. When IsEdit=false, EditDetails is empty.
         * @type {Array.<EditDetail> || null}
         */
        this.EditDetails = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.IsPass = 'IsPass' in params ? params.IsPass : null;
        this.IsEdit = 'IsEdit' in params ? params.IsEdit : null;

        if (params.CardVideo) {
            let obj = new FileInfo();
            obj.deserialize(params.CardVideo)
            this.CardVideo = obj;
        }

        if (params.CardImage) {
            let obj = new FileInfo();
            obj.deserialize(params.CardImage)
            this.CardImage = obj;
        }

        if (params.CardInfoOcrJson) {
            let obj = new FileInfo();
            obj.deserialize(params.CardInfoOcrJson)
            this.CardInfoOcrJson = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

        if (params.CardInfo) {
            let obj = new CardInfo();
            obj.deserialize(params.CardInfo)
            this.CardInfo = obj;
        }

        if (params.NormalCardInfo) {
            let obj = new NormalCardInfo();
            obj.deserialize(params.NormalCardInfo)
            this.NormalCardInfo = obj;
        }
        this.WarnCardInfos = 'WarnCardInfos' in params ? params.WarnCardInfos : null;

        if (params.EditDetails) {
            this.EditDetails = new Array();
            for (let z in params.EditDetails) {
                let obj = new EditDetail();
                obj.deserialize(params.EditDetails[z]);
                this.EditDetails.push(obj);
            }
        }

    }
}

/**
 * Taiwan (China) ID card.
 * @class
 */
class TaiWanIDCard extends  AbstractModel {
    constructor(){
        super();

        /**
         * Full name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FullName = null;

        /**
         * License number
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LicenseNumber = null;

        /**
         * Gender
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Sex = null;

        /**
         * Issued country
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.IssuedCountry = null;

        /**
         * Registration number
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.RegistrationNumber = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FullName = 'FullName' in params ? params.FullName : null;
        this.LicenseNumber = 'LicenseNumber' in params ? params.LicenseNumber : null;
        this.Sex = 'Sex' in params ? params.Sex : null;
        this.IssuedCountry = 'IssuedCountry' in params ? params.IssuedCountry : null;
        this.RegistrationNumber = 'RegistrationNumber' in params ? params.RegistrationNumber : null;

    }
}

/**
 * VideoLivenessCompare request structure.
 * @class
 */
class VideoLivenessCompareRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The URL of the photo for face comparison. The downloaded image after Base64 encoding can be up to 3 MB and must be in JPG or PNG.

The image must be stored in a COS bucket in the region where the FaceID service resides to ensure a higher download speed and better stability. You can generate an image URL by using `CreateUploadUrl` or purchase the COS service.
         * @type {string || null}
         */
        this.ImageUrl = null;

        /**
         * The 32-bit MD5 checksum of the image for comparison
         * @type {string || null}
         */
        this.ImageMd5 = null;

        /**
         * The URL of the video for liveness detection. The downloaded video after Base64 encoding can be up to 8 MB and must be in MP4, AVI, or FLV. It takes no more than 4s to download the video.

The video must be stored in a COS bucket in the region where the FaceID service resides to ensure a higher download speed and better stability. You can generate a video URL by using `CreateUploadUrl` or purchase the COS service.
         * @type {string || null}
         */
        this.VideoUrl = null;

        /**
         * The 32-bit MD5 checksum of the video
         * @type {string || null}
         */
        this.VideoMd5 = null;

        /**
         * The liveness detection type. Valid values: `LIP`, `ACTION`, and `SILENT`.
`LIP`: Numeric mode; `ACTION`: Motion mode; `SILENT`: silent mode. Select one of them.
         * @type {string || null}
         */
        this.LivenessType = null;

        /**
         * LIP parameter: Pass in a custom 4-digit verification code.
ACTION parameter: Pass in a custom action sequence (`2,1` or `1,2`).
SILENT parameter: Null.
         * @type {string || null}
         */
        this.ValidateData = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ImageUrl = 'ImageUrl' in params ? params.ImageUrl : null;
        this.ImageMd5 = 'ImageMd5' in params ? params.ImageMd5 : null;
        this.VideoUrl = 'VideoUrl' in params ? params.VideoUrl : null;
        this.VideoMd5 = 'VideoMd5' in params ? params.VideoMd5 : null;
        this.LivenessType = 'LivenessType' in params ? params.LivenessType : null;
        this.ValidateData = 'ValidateData' in params ? params.ValidateData : null;

    }
}

/**
 * ApplyWebVerificationToken request structure.
 * @class
 */
class ApplyWebVerificationTokenRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The web redirect URL after the verification is completed.
         * @type {string || null}
         */
        this.RedirectUrl = null;

        /**
         * The COS URL of the image for face comparison, which can be obtained with one of the following methods:
1. Call the `CreateUploadUrl` API to generate a URL and call it again after the image is successfully uploaded.
2. Use an existing COS URL. For a private bucket, grant the download permission with a pre-signed URL. The corresponding COS bucket must be in the same region as the input parameter `Region`.
         * @type {string || null}
         */
        this.CompareImageUrl = null;

        /**
         * The MD5 hash values of the image for face comparison (CompareImageUrl).
         * @type {string || null}
         */
        this.CompareImageMd5 = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RedirectUrl = 'RedirectUrl' in params ? params.RedirectUrl : null;
        this.CompareImageUrl = 'CompareImageUrl' in params ? params.CompareImageUrl : null;
        this.CompareImageMd5 = 'CompareImageMd5' in params ? params.CompareImageMd5 : null;

    }
}

/**
 * ApplyWebVerificationBizTokenIntl response structure.
 * @class
 */
class ApplyWebVerificationBizTokenIntlResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The token identifying this web-based verification process, valid for 7,200s after issuance. It is required for getting the result after the verification process is completed.
Example: https://intl.faceid.qq.com/reflect/?token=81EEF678-28EE-4759-A82E-6CBBBE6BC442
         * @type {string || null}
         */
        this.VerificationUrl = null;

        /**
         * A token that identifies a Web verification process, with a validity time of 10 minutes. after the process is complete, the token can be used to obtain the verification result.
         * @type {string || null}
         */
        this.BizToken = null;

        /**
         * The verification URL to be opened with a browser to start the verification process.
Example: https://intl.faceid.qq.com/reflect/?token=81EEF678-28EE-4759-A82E-6CBBBE6BC442
         * @type {string || null}
         */
        this.VerificationURL = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VerificationUrl = 'VerificationUrl' in params ? params.VerificationUrl : null;
        this.BizToken = 'BizToken' in params ? params.BizToken : null;
        this.VerificationURL = 'VerificationURL' in params ? params.VerificationURL : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Pakistan ID card
 * @class
 */
class PakistanIDCard extends  AbstractModel {
    constructor(){
        super();

        /**
         * Last name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LastName = null;

        /**
         * First name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FirstName = null;

        /**
         * License number.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LicenseNumber = null;

        /**
         * Age.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Age = null;

        /**
         * Birthday.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Birthday = null;

        /**
         * Issued country.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.IssuedCountry = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LastName = 'LastName' in params ? params.LastName : null;
        this.FirstName = 'FirstName' in params ? params.FirstName : null;
        this.LicenseNumber = 'LicenseNumber' in params ? params.LicenseNumber : null;
        this.Age = 'Age' in params ? params.Age : null;
        this.Birthday = 'Birthday' in params ? params.Birthday : null;
        this.IssuedCountry = 'IssuedCountry' in params ? params.IssuedCountry : null;

    }
}

/**
 * ApplyLivenessToken response structure.
 * @class
 */
class ApplyLivenessTokenResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The token used to identify an SDK-based verification process. It is valid for 10 minutes and can be used to get the verification result after the process is completed.
         * @type {string || null}
         */
        this.SdkToken = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkToken = 'SdkToken' in params ? params.SdkToken : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * GetCardVerificationResult request structure.
 * @class
 */
class GetCardVerificationResultRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The token used to identify an verification process. It can be used to get the verification result after the process is completed.
         * @type {string || null}
         */
        this.CardVerificationToken = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CardVerificationToken = 'CardVerificationToken' in params ? params.CardVerificationToken : null;

    }
}

/**
 * License OCR result
 * @class
 */
class CardInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Hong Kong ID (China) Card
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {HKIDCard || null}
         */
        this.HKIDCard = null;

        /**
         * Malaysia ID Card
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {MLIDCard || null}
         */
        this.MLIDCard = null;

        /**
         * Philippines VoteID Card
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {PhilippinesVoteID || null}
         */
        this.PhilippinesVoteID = null;

        /**
         * Indonesia ID Card
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {IndonesiaIDCard || null}
         */
        this.IndonesiaIDCard = null;

        /**
         * Philippines Driving License
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {PhilippinesDrivingLicense || null}
         */
        this.PhilippinesDrivingLicense = null;

        /**
         * Philippines TinID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {PhilippinesTinID || null}
         */
        this.PhilippinesTinID = null;

        /**
         * Philippines SSSID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {PhilippinesSSSID || null}
         */
        this.PhilippinesSSSID = null;

        /**
         * Philippines UMID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {PhilippinesUMID || null}
         */
        this.PhilippinesUMID = null;

        /**
         * ID Cards of Hong Kong (China), Macao (China) and Taiwan (China), and International Passport
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {InternationalIDPassport || null}
         */
        this.InternationalIDPassport = null;

        /**
         * General license information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {GeneralCard || null}
         */
        this.GeneralCard = null;

        /**
         * Indonesia Driving License
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {IndonesiaDrivingLicense || null}
         */
        this.IndonesiaDrivingLicense = null;

        /**
         * Thailand ID Card
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ThailandIDCard || null}
         */
        this.ThailandIDCard = null;

        /**
         * Singapore ID Card
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {SingaporeIDCard || null}
         */
        this.SingaporeIDCard = null;

        /**
         * Macao (China) ID Card
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {MacaoIDCard || null}
         */
        this.MacaoIDCard = null;

        /**
         * TaiWan (China) ID Card
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {TaiWanIDCard || null}
         */
        this.TaiWanIDCard = null;

        /**
         * Japan ID Card
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {JapanIDCard || null}
         */
        this.JapanIDCard = null;

        /**
         * Bangladesh ID Card
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {BangladeshIDCard || null}
         */
        this.BangladeshIDCard = null;

        /**
         * Nigeria ID Card
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {NigeriaIDCard || null}
         */
        this.NigeriaIDCard = null;

        /**
         * Nigeria driving license
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {NigeriaDrivingLicense || null}
         */
        this.NigeriaDrivingLicense = null;

        /**
         * Pakistan ID Card
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {PakistanIDCard || null}
         */
        this.PakistanIDCard = null;

        /**
         * Pakistan driving license
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {PakistanDrivingLicense || null}
         */
        this.PakistanDrivingLicense = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.HKIDCard) {
            let obj = new HKIDCard();
            obj.deserialize(params.HKIDCard)
            this.HKIDCard = obj;
        }

        if (params.MLIDCard) {
            let obj = new MLIDCard();
            obj.deserialize(params.MLIDCard)
            this.MLIDCard = obj;
        }

        if (params.PhilippinesVoteID) {
            let obj = new PhilippinesVoteID();
            obj.deserialize(params.PhilippinesVoteID)
            this.PhilippinesVoteID = obj;
        }

        if (params.IndonesiaIDCard) {
            let obj = new IndonesiaIDCard();
            obj.deserialize(params.IndonesiaIDCard)
            this.IndonesiaIDCard = obj;
        }

        if (params.PhilippinesDrivingLicense) {
            let obj = new PhilippinesDrivingLicense();
            obj.deserialize(params.PhilippinesDrivingLicense)
            this.PhilippinesDrivingLicense = obj;
        }

        if (params.PhilippinesTinID) {
            let obj = new PhilippinesTinID();
            obj.deserialize(params.PhilippinesTinID)
            this.PhilippinesTinID = obj;
        }

        if (params.PhilippinesSSSID) {
            let obj = new PhilippinesSSSID();
            obj.deserialize(params.PhilippinesSSSID)
            this.PhilippinesSSSID = obj;
        }

        if (params.PhilippinesUMID) {
            let obj = new PhilippinesUMID();
            obj.deserialize(params.PhilippinesUMID)
            this.PhilippinesUMID = obj;
        }

        if (params.InternationalIDPassport) {
            let obj = new InternationalIDPassport();
            obj.deserialize(params.InternationalIDPassport)
            this.InternationalIDPassport = obj;
        }

        if (params.GeneralCard) {
            let obj = new GeneralCard();
            obj.deserialize(params.GeneralCard)
            this.GeneralCard = obj;
        }

        if (params.IndonesiaDrivingLicense) {
            let obj = new IndonesiaDrivingLicense();
            obj.deserialize(params.IndonesiaDrivingLicense)
            this.IndonesiaDrivingLicense = obj;
        }

        if (params.ThailandIDCard) {
            let obj = new ThailandIDCard();
            obj.deserialize(params.ThailandIDCard)
            this.ThailandIDCard = obj;
        }

        if (params.SingaporeIDCard) {
            let obj = new SingaporeIDCard();
            obj.deserialize(params.SingaporeIDCard)
            this.SingaporeIDCard = obj;
        }

        if (params.MacaoIDCard) {
            let obj = new MacaoIDCard();
            obj.deserialize(params.MacaoIDCard)
            this.MacaoIDCard = obj;
        }

        if (params.TaiWanIDCard) {
            let obj = new TaiWanIDCard();
            obj.deserialize(params.TaiWanIDCard)
            this.TaiWanIDCard = obj;
        }

        if (params.JapanIDCard) {
            let obj = new JapanIDCard();
            obj.deserialize(params.JapanIDCard)
            this.JapanIDCard = obj;
        }

        if (params.BangladeshIDCard) {
            let obj = new BangladeshIDCard();
            obj.deserialize(params.BangladeshIDCard)
            this.BangladeshIDCard = obj;
        }

        if (params.NigeriaIDCard) {
            let obj = new NigeriaIDCard();
            obj.deserialize(params.NigeriaIDCard)
            this.NigeriaIDCard = obj;
        }

        if (params.NigeriaDrivingLicense) {
            let obj = new NigeriaDrivingLicense();
            obj.deserialize(params.NigeriaDrivingLicense)
            this.NigeriaDrivingLicense = obj;
        }

        if (params.PakistanIDCard) {
            let obj = new PakistanIDCard();
            obj.deserialize(params.PakistanIDCard)
            this.PakistanIDCard = obj;
        }

        if (params.PakistanDrivingLicense) {
            let obj = new PakistanDrivingLicense();
            obj.deserialize(params.PakistanDrivingLicense)
            this.PakistanDrivingLicense = obj;
        }

    }
}

/**
 * Philippines VoteID Card
 * @class
 */
class PhilippinesVoteID extends  AbstractModel {
    constructor(){
        super();

        /**
         * VIN of Philippines VoteID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.VIN = null;

        /**
         * First name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FirstName = null;

        /**
         * Last name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LastName = null;

        /**
         * Birthday
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Birthday = null;

        /**
         * Civil status
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CivilStatus = null;

        /**
         * Nationality
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Citizenship = null;

        /**
         * Address
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Address = null;

        /**
         * Region
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.PrecinctNo = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VIN = 'VIN' in params ? params.VIN : null;
        this.FirstName = 'FirstName' in params ? params.FirstName : null;
        this.LastName = 'LastName' in params ? params.LastName : null;
        this.Birthday = 'Birthday' in params ? params.Birthday : null;
        this.CivilStatus = 'CivilStatus' in params ? params.CivilStatus : null;
        this.Citizenship = 'Citizenship' in params ? params.Citizenship : null;
        this.Address = 'Address' in params ? params.Address : null;
        this.PrecinctNo = 'PrecinctNo' in params ? params.PrecinctNo : null;

    }
}

/**
 * eKYC Web related configuration
 * @class
 */
class WebVerificationConfigIntl extends  AbstractModel {
    constructor(){
        super();

        /**
         * When starting verification, whether to skip the starting verification page. If true, enter the verification process directly. The default is false. This configuration will not take effect if the downgrade policy is triggered.
         * @type {boolean || null}
         */
        this.AutoSkipStartPage = null;

        /**
         * When the verification passed, whether to skip the result page and automatically jump to RedirectURL. The default value is false.
Example value: false
         * @type {boolean || null}
         */
        this.AutoSkip = null;

        /**
         * Detection mode, parameter values are as follows:
1: OCR+liveness detection & face comparison;
2: Liveness detection & face comparison;
3: Liveness detection;
4: OCR;
The default value is 2.
Example value: 3
         * @type {number || null}
         */
        this.CheckMode = null;

        /**
         * The type of lisence used for verification. The following types are supported.
1.HKIDCard: Hong Kong (China) ID card
2.MLIDCard: Malaysia ID card
3.IndonesialDCard: Indonesia ID card
4.PhilippinesVoteID: Philippines Vote lD card
5.PhilippinesDrivingLicense: Philippines driving license
6.PhilippinesTinID: Philippines TinID card
7.PhilippinesSSSID: Philippines SSSID card
8.PhilippinesUMID: Philippines UMID card
9.InternationallDPassport: ID cards of Hong Kong (China), Macao (China) and Taiwan (China), and international passport.
10.ThailandIDCard: Thailand ID card
11.SingaporelDCard: Singapore ID card
12.MainlandIDCard: Mainland (China) ID card
Example: HKIDCard
         * @type {string || null}
         */
        this.IDCardType = null;

        /**
         * Whether to turn off document alarms, the default is false (the alarm detection function is turned on). When enabled, the identity authentication process will be intercepted based on the alarm status of the certificate. If you need to use the document authentication function, please contact us.
         * @type {boolean || null}
         */
        this.DisableCheckOcrWarnings = null;

        /**
         * Liveness security level: 1:Silent mode;2:Action mode;3:Lighting mode;4:Action+Lighting mode;5:Action+Lighting(High security) mode; default value is 3
         * @type {number || null}
         */
        this.SecurityLevel = null;

        /**
         * Whether to skip the agreement page, the default is false. When SkipPrivacyPolicy is false, the agreement page will be displayed and the privacy agreement needs to be checked; when SkipPrivacyPolicy is true, the agreement page will be skipped and the liveness process will be entered directly without checking the privacy agreement page.
         * @type {boolean || null}
         */
        this.SkipPrivacyPolicy = null;

        /**
         * The default value is false. If it is false, the original ID image will be displayed. If it is true, the cut ID image will be displayed.
         * @type {boolean || null}
         */
        this.IdCardCutReturn = null;

        /**
         * Front-end theme color, in the format of RGB hexadecimal color code. The default value is "#2d72f1". If the format is incorrect, the default value color will be used. 
         * @type {string || null}
         */
        this.ThemeColor = null;

        /**
         * International language, the default value is en (English). Currently supported: th: Thai; en: English; zh-cn: Simplified Chinese; zh-tc: Tradionnal Chinese; id: Bahasa Indonesia.
         * @type {string || null}
         */
        this.Language = null;

        /**
         * Automatic downgrade mode, with the following parameter values: 1: Downgrade to silent live mode; 2: Disable downgrade mode. The default value is 1.
         * @type {number || null}
         */
        this.AutoDowngrade = null;

        /**
         * This interface is used to control th action sequences.
Action types are as follows:
"blink"
"mouth"
"nod"
"shake"
You can choose 1-2 actions out of the four.
Single action example: "blink"
Multiple action example: "blink,mouth"
The default value is blink. The different action types passed in this parameter take effect only when the SecurityLevel is 2, 4, or 5; otherwise, the interface reports an error.
         * @type {string || null}
         */
        this.ActionList = null;

        /**
         * Control liveness retry number.The value range is 1-99.
         * @type {number || null}
         */
        this.LivenessRetryLimit = null;

        /**
         * Specifies the liveness detection timeout period in seconds. value range: (0,600].
         * @type {number || null}
         */
        this.LivenessTimeout = null;

        /**
         * Selects OCR alarms requiring attention. When an OCR Alarm occurs, the identity verification process will be interrupted. Default value is empty, indicating all alarms are monitored. This feature requires the parameter DisableCheckOcrWarnings=false. If the Alarm is disabled, this parameter will not be effective.
         * @type {string || null}
         */
        this.SelectedWarningCodes = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoSkipStartPage = 'AutoSkipStartPage' in params ? params.AutoSkipStartPage : null;
        this.AutoSkip = 'AutoSkip' in params ? params.AutoSkip : null;
        this.CheckMode = 'CheckMode' in params ? params.CheckMode : null;
        this.IDCardType = 'IDCardType' in params ? params.IDCardType : null;
        this.DisableCheckOcrWarnings = 'DisableCheckOcrWarnings' in params ? params.DisableCheckOcrWarnings : null;
        this.SecurityLevel = 'SecurityLevel' in params ? params.SecurityLevel : null;
        this.SkipPrivacyPolicy = 'SkipPrivacyPolicy' in params ? params.SkipPrivacyPolicy : null;
        this.IdCardCutReturn = 'IdCardCutReturn' in params ? params.IdCardCutReturn : null;
        this.ThemeColor = 'ThemeColor' in params ? params.ThemeColor : null;
        this.Language = 'Language' in params ? params.Language : null;
        this.AutoDowngrade = 'AutoDowngrade' in params ? params.AutoDowngrade : null;
        this.ActionList = 'ActionList' in params ? params.ActionList : null;
        this.LivenessRetryLimit = 'LivenessRetryLimit' in params ? params.LivenessRetryLimit : null;
        this.LivenessTimeout = 'LivenessTimeout' in params ? params.LivenessTimeout : null;
        this.SelectedWarningCodes = 'SelectedWarningCodes' in params ? params.SelectedWarningCodes : null;

    }
}

/**
 * Mainland (China) ID Card OCR
 * @class
 */
class MainlandIDCard extends  AbstractModel {
    constructor(){
        super();

        /**
         * Chinese name
Note: This field may return null, indicating that no valid values can be obtained.

         * @type {string || null}
         */
        this.FullName = null;

        /**
         * Sex
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Sex = null;

        /**
         * Nation
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Nation = null;

        /**
         * Birthday
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Birthday = null;

        /**
         * Address
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Address = null;

        /**
         * License number
Note: This field may return null, indicating that no valid values can be obtained.

         * @type {string || null}
         */
        this.LicenseNumber = null;

        /**
         * Address
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FormattedAddress = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FullName = 'FullName' in params ? params.FullName : null;
        this.Sex = 'Sex' in params ? params.Sex : null;
        this.Nation = 'Nation' in params ? params.Nation : null;
        this.Birthday = 'Birthday' in params ? params.Birthday : null;
        this.Address = 'Address' in params ? params.Address : null;
        this.LicenseNumber = 'LicenseNumber' in params ? params.LicenseNumber : null;
        this.FormattedAddress = 'FormattedAddress' in params ? params.FormattedAddress : null;

    }
}

/**
 * 
 * @class
 */
class Encryption extends  AbstractModel {
    constructor(){
        super();

        /**
         * 
         * @type {Array.<string> || null}
         */
        this.EncryptList = null;

        /**
         * 
         * @type {string || null}
         */
        this.CiphertextBlob = null;

        /**
         * 
         * @type {string || null}
         */
        this.Iv = null;

        /**
         * 
         * @type {string || null}
         */
        this.Algorithm = null;

        /**
         * 
         * @type {Array.<string> || null}
         */
        this.TagList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.EncryptList = 'EncryptList' in params ? params.EncryptList : null;
        this.CiphertextBlob = 'CiphertextBlob' in params ? params.CiphertextBlob : null;
        this.Iv = 'Iv' in params ? params.Iv : null;
        this.Algorithm = 'Algorithm' in params ? params.Algorithm : null;
        this.TagList = 'TagList' in params ? params.TagList : null;

    }
}

/**
 * 
 * @class
 */
class Address extends  AbstractModel {
    constructor(){
        super();

        /**
         * Nationality.
         * @type {string || null}
         */
        this.Country = null;

        /**
         * Post code.
         * @type {string || null}
         */
        this.PostalCode = null;

        /**
         * Subregion.
         * @type {string || null}
         */
        this.Subdivision = null;

        /**
         * City.
         * @type {string || null}
         */
        this.City = null;

        /**
         * Complete address.
         * @type {string || null}
         */
        this.FormattedAddress = null;

        /**
         * The first line of address.
         * @type {string || null}
         */
        this.LineOne = null;

        /**
         * The second line of address.
         * @type {string || null}
         */
        this.LineTwo = null;

        /**
         * The third line of address.
         * @type {string || null}
         */
        this.LineThree = null;

        /**
         * The fourth line of address.
         * @type {string || null}
         */
        this.LineFour = null;

        /**
         * The fifth line of address.
         * @type {string || null}
         */
        this.LineFive = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Country = 'Country' in params ? params.Country : null;
        this.PostalCode = 'PostalCode' in params ? params.PostalCode : null;
        this.Subdivision = 'Subdivision' in params ? params.Subdivision : null;
        this.City = 'City' in params ? params.City : null;
        this.FormattedAddress = 'FormattedAddress' in params ? params.FormattedAddress : null;
        this.LineOne = 'LineOne' in params ? params.LineOne : null;
        this.LineTwo = 'LineTwo' in params ? params.LineTwo : null;
        this.LineThree = 'LineThree' in params ? params.LineThree : null;
        this.LineFour = 'LineFour' in params ? params.LineFour : null;
        this.LineFive = 'LineFive' in params ? params.LineFive : null;

    }
}

/**
 * 
 * @class
 */
class RetrievalLivenessExtraInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * 
         * @type {string || null}
         */
        this.HitGroup = null;

        /**
         * 
         * @type {number || null}
         */
        this.SimilarityScore = null;

        /**
         * 
         * @type {string || null}
         */
        this.HitTemplate = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.HitGroup = 'HitGroup' in params ? params.HitGroup : null;
        this.SimilarityScore = 'SimilarityScore' in params ? params.SimilarityScore : null;
        this.HitTemplate = 'HitTemplate' in params ? params.HitTemplate : null;

    }
}

/**
 * Nigeria ID card
 * @class
 */
class NigeriaIDCard extends  AbstractModel {
    constructor(){
        super();

        /**
         * Last name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LastName = null;

        /**
         * First name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FirstName = null;

        /**
         * License number.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LicenseNumber = null;

        /**
         * Age.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Age = null;

        /**
         * Birthday.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Birthday = null;

        /**
         * Issued country.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.IssuedCountry = null;

        /**
         * Gender.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Sex = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LastName = 'LastName' in params ? params.LastName : null;
        this.FirstName = 'FirstName' in params ? params.FirstName : null;
        this.LicenseNumber = 'LicenseNumber' in params ? params.LicenseNumber : null;
        this.Age = 'Age' in params ? params.Age : null;
        this.Birthday = 'Birthday' in params ? params.Birthday : null;
        this.IssuedCountry = 'IssuedCountry' in params ? params.IssuedCountry : null;
        this.Sex = 'Sex' in params ? params.Sex : null;

    }
}

/**
 * Indonesia ID card.
 * @class
 */
class NormalIndonesiaIDCard extends  AbstractModel {
    constructor(){
        super();

        /**
         * License number
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LicenseNumber = null;

        /**
         * Name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FullName = null;

        /**
         * Birth place/Birthday
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Birthday = null;

        /**
         * Gender
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Sex = null;

        /**
         * Blood type
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.BloodType = null;

        /**
         * Address
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FormattedAddress = null;

        /**
         * Street
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Street = null;

        /**
         * Village
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Village = null;

        /**
         * Region
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Area = null;

        /**
         * Religious beliefs
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Religion = null;

        /**
         * Marital status
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.MaritalStatus = null;

        /**
         * Job
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Occupation = null;

        /**
         * Nationality
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Nationality = null;

        /**
         * ID card validity period
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DueDate = null;

        /**
         * Date of issue
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.IssuedDate = null;

        /**
         * Province
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Province = null;

        /**
         * City
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.City = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LicenseNumber = 'LicenseNumber' in params ? params.LicenseNumber : null;
        this.FullName = 'FullName' in params ? params.FullName : null;
        this.Birthday = 'Birthday' in params ? params.Birthday : null;
        this.Sex = 'Sex' in params ? params.Sex : null;
        this.BloodType = 'BloodType' in params ? params.BloodType : null;
        this.FormattedAddress = 'FormattedAddress' in params ? params.FormattedAddress : null;
        this.Street = 'Street' in params ? params.Street : null;
        this.Village = 'Village' in params ? params.Village : null;
        this.Area = 'Area' in params ? params.Area : null;
        this.Religion = 'Religion' in params ? params.Religion : null;
        this.MaritalStatus = 'MaritalStatus' in params ? params.MaritalStatus : null;
        this.Occupation = 'Occupation' in params ? params.Occupation : null;
        this.Nationality = 'Nationality' in params ? params.Nationality : null;
        this.DueDate = 'DueDate' in params ? params.DueDate : null;
        this.IssuedDate = 'IssuedDate' in params ? params.IssuedDate : null;
        this.Province = 'Province' in params ? params.Province : null;
        this.City = 'City' in params ? params.City : null;

    }
}

/**
 * CompareFaceLiveness response structure.
 * @class
 */
class CompareFaceLivenessResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Business Error Codes.
-When the return value is "Success", it indicates that liveness detection and face comparison passed. Determined to be the same person.
-When the return value is "FailedOperation.CompareLowSimilarity", it indicates that liveness detection passed, but face comparison similarity is below 70. Determined not to be the same person.
-For other error cases, please refer to [Liveness Face Comparison (API only) Error Codes](https://www.tencentcloud.com/zh/document/product/1061/55390?lang=zh&pg=#97df7537-87fe-4266-87e9-02c816d41ee2)
         * @type {string || null}
         */
        this.Result = null;

        /**
         * The service result description
         * @type {string || null}
         */
        this.Description = null;

        /**
         * This value indicates the similarity of face comparison. Value range: 0.00-100.00.
- The false acceptance rate for a threshold of 70 is 0.1%, and for a threshold of 80, it is 0.01%.
- This value is valid when the Result parameter is "Success" or "FailedOperation.CompareLowSimilarity".
         * @type {number || null}
         */
        this.Sim = null;

        /**
         * The best screenshot photo from the video after verification, encoded in BASE64, in jpg format.
The optimal screenshot of the video after verification is the value encoded by BASE64, jpg format. 
Note: This field may return "null", indicating that no valid value can be obtained. 
Example values: "/9j/4AAQSk... (total length:142036)s97n//2Q=="
         * @type {string || null}
         */
        this.BestFrameBase64 = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Result = 'Result' in params ? params.Result : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.Sim = 'Sim' in params ? params.Sim : null;
        this.BestFrameBase64 = 'BestFrameBase64' in params ? params.BestFrameBase64 : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Indonesia ID card.
 * @class
 */
class IndonesiaIDCard extends  AbstractModel {
    constructor(){
        super();

        /**
         * License number
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.NIK = null;

        /**
         * Name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Nama = null;

        /**
         * Birth place/Birthday
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TempatTglLahir = null;

        /**
         * Gender
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.JenisKelamin = null;

        /**
         * Blood type
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.GolDarah = null;

        /**
         * Address
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Alamat = null;

        /**
         * Street
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.RTRW = null;

        /**
         * Village
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.KelDesa = null;

        /**
         * Region
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Kecamatan = null;

        /**
         * Religious beliefs
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Agama = null;

        /**
         * Marital status
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.StatusPerkawinan = null;

        /**
         * Job
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Perkerjaan = null;

        /**
         * Nationality
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.KewargaNegaraan = null;

        /**
         * ID card validity period
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.BerlakuHingga = null;

        /**
         * Date of issue
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.IssuedDate = null;

        /**
         * Province
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Provinsi = null;

        /**
         * City
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Kota = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NIK = 'NIK' in params ? params.NIK : null;
        this.Nama = 'Nama' in params ? params.Nama : null;
        this.TempatTglLahir = 'TempatTglLahir' in params ? params.TempatTglLahir : null;
        this.JenisKelamin = 'JenisKelamin' in params ? params.JenisKelamin : null;
        this.GolDarah = 'GolDarah' in params ? params.GolDarah : null;
        this.Alamat = 'Alamat' in params ? params.Alamat : null;
        this.RTRW = 'RTRW' in params ? params.RTRW : null;
        this.KelDesa = 'KelDesa' in params ? params.KelDesa : null;
        this.Kecamatan = 'Kecamatan' in params ? params.Kecamatan : null;
        this.Agama = 'Agama' in params ? params.Agama : null;
        this.StatusPerkawinan = 'StatusPerkawinan' in params ? params.StatusPerkawinan : null;
        this.Perkerjaan = 'Perkerjaan' in params ? params.Perkerjaan : null;
        this.KewargaNegaraan = 'KewargaNegaraan' in params ? params.KewargaNegaraan : null;
        this.BerlakuHingga = 'BerlakuHingga' in params ? params.BerlakuHingga : null;
        this.IssuedDate = 'IssuedDate' in params ? params.IssuedDate : null;
        this.Provinsi = 'Provinsi' in params ? params.Provinsi : null;
        this.Kota = 'Kota' in params ? params.Kota : null;

    }
}

/**
 * ApplySdkVerificationToken response structure.
 * @class
 */
class ApplySdkVerificationTokenResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * A token that identifies an SDK verification process. the validity time is 10 minutes. after the process is complete, the token can be used to retrieve the verification result.
         * @type {string || null}
         */
        this.SdkToken = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkToken = 'SdkToken' in params ? params.SdkToken : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Exit/entry permit (card) for traveling to and from Hong Kong (China), Macao (China), or Taiwan (China)
 * @class
 */
class HMTPermit extends  AbstractModel {
    constructor(){
        super();

        /**
         * Name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * English name
         * @type {string || null}
         */
        this.EnglishName = null;

        /**
         * License number
         * @type {string || null}
         */
        this.Number = null;

        /**
         * Gender
         * @type {string || null}
         */
        this.Sex = null;

        /**
         * Valid date
         * @type {string || null}
         */
        this.ValidDate = null;

        /**
         * Issued authority
         * @type {string || null}
         */
        this.IssueAuthority = null;

        /**
         * Issued address
         * @type {string || null}
         */
        this.IssueAddress = null;

        /**
         * Birthday
         * @type {string || null}
         */
        this.Birthday = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.EnglishName = 'EnglishName' in params ? params.EnglishName : null;
        this.Number = 'Number' in params ? params.Number : null;
        this.Sex = 'Sex' in params ? params.Sex : null;
        this.ValidDate = 'ValidDate' in params ? params.ValidDate : null;
        this.IssueAuthority = 'IssueAuthority' in params ? params.IssueAuthority : null;
        this.IssueAddress = 'IssueAddress' in params ? params.IssueAddress : null;
        this.Birthday = 'Birthday' in params ? params.Birthday : null;

    }
}

/**
 * CreateUploadUrl request structure.
 * @class
 */
class CreateUploadUrlRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Target API
         * @type {string || null}
         */
        this.TargetAction = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TargetAction = 'TargetAction' in params ? params.TargetAction : null;

    }
}

/**
 * ApplyWebVerificationBizTokenIntl request structure.
 * @class
 */
class ApplyWebVerificationBizTokenIntlRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The web callback URL to redirect to after the verification is completed, including the protocol, hostname, and path. 
After the verification process is completed, the BizToken of this process will be spliced to the callback URL in the format of https://www.tencentcloud.com/products/faceid?token={BizToken} before redirect.
Example: https://www.tencentcloud.com/products/faceid.
         * @type {string || null}
         */
        this.RedirectURL = null;

        /**
         * The Base64-encoded string (max 8 MB in size) of the photo to be compared.The Data URI scheme header needs to be removed from the encoded string
Example: xhBQAAACBjSFJNAAB6****AAAASUVORK5CYII=
         * @type {string || null}
         */
        this.CompareImageBase64 = null;

        /**
         * The passthrough parameter of the business, max 1,000 characters, which will be returned in GetWebVerificationResultIntl.
         * @type {string || null}
         */
        this.Extra = null;

        /**
         * The business process ID generated by the console.
         * @type {string || null}
         */
        this.RuleId = null;

        /**
         * The parameter control the page configuration.
Example: {"AutoSkip": true,"CheckMode": 1,"IdCardType": "HKIDCard"}
         * @type {WebVerificationConfigIntl || null}
         */
        this.Config = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RedirectURL = 'RedirectURL' in params ? params.RedirectURL : null;
        this.CompareImageBase64 = 'CompareImageBase64' in params ? params.CompareImageBase64 : null;
        this.Extra = 'Extra' in params ? params.Extra : null;
        this.RuleId = 'RuleId' in params ? params.RuleId : null;

        if (params.Config) {
            let obj = new WebVerificationConfigIntl();
            obj.deserialize(params.Config)
            this.Config = obj;
        }

    }
}

/**
 * GetWebVerificationResult response structure.
 * @class
 */
class GetWebVerificationResultResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The final result of this verification. `0` indicates that the person is the same as that in the photo.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ErrorCode = null;

        /**
         * The description of the final verification result.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The temporary URL of the best face screenshot collected from the video stream. It is valid for 10 minutes. Download the image if needed.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.VideoBestFrameUrl = null;

        /**
         * The MD5 hash value of the best face screenshot collected from the video stream. It can be used to check whether the image content is consistent with the file content.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.VideoBestFrameMd5 = null;

        /**
         * The details list of this verification process.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<VerificationDetail> || null}
         */
        this.VerificationDetailList = null;

        /**
         * The temporary URL of the video collected from the video stream. It is valid for 10 minutes. Download the video if needed.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.VideoUrl = null;

        /**
         * The MD5 hash value of the video collected from the video stream. It can be used to check whether the video content is consistent with the file content.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.VideoMd5 = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ErrorCode = 'ErrorCode' in params ? params.ErrorCode : null;
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.VideoBestFrameUrl = 'VideoBestFrameUrl' in params ? params.VideoBestFrameUrl : null;
        this.VideoBestFrameMd5 = 'VideoBestFrameMd5' in params ? params.VideoBestFrameMd5 : null;

        if (params.VerificationDetailList) {
            this.VerificationDetailList = new Array();
            for (let z in params.VerificationDetailList) {
                let obj = new VerificationDetail();
                obj.deserialize(params.VerificationDetailList[z]);
                this.VerificationDetailList.push(obj);
            }
        }
        this.VideoUrl = 'VideoUrl' in params ? params.VideoUrl : null;
        this.VideoMd5 = 'VideoMd5' in params ? params.VideoMd5 : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CompareFaceLiveness request structure.
 * @class
 */
class CompareFaceLivenessRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Base64 string of the image for face comparison.
- The size of the Base64-encoded image data can be up to 3 MB. JPG and PNG formats are supported.
- Please use the standard Base64 encoding method (with = padding). Refer to RFC4648 for the encoding specification.
         * @type {string || null}
         */
        this.ImageBase64 = null;

        /**
         * Base64 string of the video for liveness detection.
- The size of the Base64-encoded video data can be up to 8 MB. MP4, AVI, and FLV formats are supported.
-Use standard Base64 encoding (with = padding), following RFC4648.
         * @type {string || null}
         */
        this.VideoBase64 = null;

        /**
         * Liveness detection type.
-Values:
ACTION is action mode.
SILENT is silent mode.
-Choose one of the two modes to pass in.
         * @type {string || null}
         */
        this.LivenessType = null;

        /**
         * Control the action sequence. Action types include: 1 (open mouth), 2 (blink), 3 (nod), 4 (shake head). Supports one or two actions.
-Required when the LivenessType parameter is set to ACTION.
-Single action example: "1".
-Multiple actions parameter passing example: "4,2".
-When the LivenessType parameter is set to SILENT, leave it blank.
         * @type {string || null}
         */
        this.ValidateData = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ImageBase64 = 'ImageBase64' in params ? params.ImageBase64 : null;
        this.VideoBase64 = 'VideoBase64' in params ? params.VideoBase64 : null;
        this.LivenessType = 'LivenessType' in params ? params.LivenessType : null;
        this.ValidateData = 'ValidateData' in params ? params.ValidateData : null;

    }
}

/**
 * Macao (China) IDCard
 * @class
 */
class MacaoIDCard extends  AbstractModel {
    constructor(){
        super();

        /**
         * First name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FirstName = null;

        /**
         * Last name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LastName = null;

        /**
         * Birthday
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Birthday = null;

        /**
         * Expiration date
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ExpirationDate = null;

        /**
         * License number
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LicenseNumber = null;

        /**
         * Sex
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Sex = null;

        /**
         * Age
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Age = null;

        /**
         * Issued country
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.IssuedCountry = null;

        /**
         * MRZ1 on card
Note: This field may return null, indicating that no valid values can be obtained. 
         * @type {string || null}
         */
        this.Field1 = null;

        /**
         * MRZ2 on card
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Field2 = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FirstName = 'FirstName' in params ? params.FirstName : null;
        this.LastName = 'LastName' in params ? params.LastName : null;
        this.Birthday = 'Birthday' in params ? params.Birthday : null;
        this.ExpirationDate = 'ExpirationDate' in params ? params.ExpirationDate : null;
        this.LicenseNumber = 'LicenseNumber' in params ? params.LicenseNumber : null;
        this.Sex = 'Sex' in params ? params.Sex : null;
        this.Age = 'Age' in params ? params.Age : null;
        this.IssuedCountry = 'IssuedCountry' in params ? params.IssuedCountry : null;
        this.Field1 = 'Field1' in params ? params.Field1 : null;
        this.Field2 = 'Field2' in params ? params.Field2 : null;

    }
}

/**
 * ApplyLivenessToken request structure.
 * @class
 */
class ApplyLivenessTokenRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Enumerated value. Valid values: `1`, `2`, `3`, and `4`.
Their meanings are as follows:
1 - silent
2 - blinking
3 - light
4 - blinking + light (default)
         * @type {string || null}
         */
        this.SecureLevel = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SecureLevel = 'SecureLevel' in params ? params.SecureLevel : null;

    }
}

/**
 * Thailand ID Card
 * @class
 */
class NormalThailandIDCard extends  AbstractModel {
    constructor(){
        super();

        /**
         * LicenseNumber
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LicenseNumber = null;

        /**
         * Thailand name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FullName = null;

        /**
         * Last name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LastName = null;

        /**
         * First name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FirstName = null;

        /**
         * Birthday
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Birthday = null;

        /**
         * Address
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FormattedAddress = null;

        /**
         * Expiration date
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ExpirationDate = null;

        /**
         * Issued date
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.IssuedDate = null;

        /**
         * Registration number 
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.RegistrationNumber = null;

        /**
         * Religion
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Religion = null;

        /**
         * Birthday in Thai
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ThaiBirthday = null;

        /**
         * Expiration date in Thai
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ThaiExpirationDate = null;

        /**
         * Issued date in Thai
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ThaiIssueDate = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LicenseNumber = 'LicenseNumber' in params ? params.LicenseNumber : null;
        this.FullName = 'FullName' in params ? params.FullName : null;
        this.LastName = 'LastName' in params ? params.LastName : null;
        this.FirstName = 'FirstName' in params ? params.FirstName : null;
        this.Birthday = 'Birthday' in params ? params.Birthday : null;
        this.FormattedAddress = 'FormattedAddress' in params ? params.FormattedAddress : null;
        this.ExpirationDate = 'ExpirationDate' in params ? params.ExpirationDate : null;
        this.IssuedDate = 'IssuedDate' in params ? params.IssuedDate : null;
        this.RegistrationNumber = 'RegistrationNumber' in params ? params.RegistrationNumber : null;
        this.Religion = 'Religion' in params ? params.Religion : null;
        this.ThaiBirthday = 'ThaiBirthday' in params ? params.ThaiBirthday : null;
        this.ThaiExpirationDate = 'ThaiExpirationDate' in params ? params.ThaiExpirationDate : null;
        this.ThaiIssueDate = 'ThaiIssueDate' in params ? params.ThaiIssueDate : null;

    }
}

/**
 * Philippines driving license
 * @class
 */
class PhilippinesDrivingLicense extends  AbstractModel {
    constructor(){
        super();

        /**
         * Full Name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Last name

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LastName = null;

        /**
         * First name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FirstName = null;

        /**
         * Middle name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.MiddleName = null;

        /**
         * Nationality
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Nationality = null;

        /**
         * Gender
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Sex = null;

        /**
         * Address
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Address = null;

        /**
         * License number
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LicenseNo = null;

        /**
         * Date of expiry
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ExpiresDate = null;

        /**
         * Agency code
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AgencyCode = null;

        /**
         * Birthday
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Birthday = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.LastName = 'LastName' in params ? params.LastName : null;
        this.FirstName = 'FirstName' in params ? params.FirstName : null;
        this.MiddleName = 'MiddleName' in params ? params.MiddleName : null;
        this.Nationality = 'Nationality' in params ? params.Nationality : null;
        this.Sex = 'Sex' in params ? params.Sex : null;
        this.Address = 'Address' in params ? params.Address : null;
        this.LicenseNo = 'LicenseNo' in params ? params.LicenseNo : null;
        this.ExpiresDate = 'ExpiresDate' in params ? params.ExpiresDate : null;
        this.AgencyCode = 'AgencyCode' in params ? params.AgencyCode : null;
        this.Birthday = 'Birthday' in params ? params.Birthday : null;

    }
}

/**
 * GetCardVerificationResult response structure.
 * @class
 */
class GetCardVerificationResultResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Pass status. When Warning and Rejected are returned, please check the specific reasons in the WarnInfo structure return. Example values are as follows:
PASSED
WARNING
REJECTED
PROCESSING
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Warning information returned by document verification.
         * @type {Array.<string> || null}
         */
        this.WarnInfo = null;

        /**
         * Nationality code. Complies with standard ISO 3166-1 alpha-3. 

Example value: IDN
         * @type {string || null}
         */
        this.Nationality = null;

        /**
         * Card Type. The supported options are:
ID_CARD
PASSPORT
DRIVING_LICENSE
AUTO

Example value: ID_CARD
         * @type {string || null}
         */
        this.CardType = null;

        /**
         * Subtype of the ID document.

         * @type {string || null}
         */
        this.CardSubType = null;

        /**
         * Recognition results of the ID document.
         * @type {CardInfo || null}
         */
        this.CardInfo = null;

        /**
         * The token used to identify an verification process. It can be used to get the verification result after the process is completed.
         * @type {string || null}
         */
        this.IDVerificationToken = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Status = 'Status' in params ? params.Status : null;
        this.WarnInfo = 'WarnInfo' in params ? params.WarnInfo : null;
        this.Nationality = 'Nationality' in params ? params.Nationality : null;
        this.CardType = 'CardType' in params ? params.CardType : null;
        this.CardSubType = 'CardSubType' in params ? params.CardSubType : null;

        if (params.CardInfo) {
            let obj = new CardInfo();
            obj.deserialize(params.CardInfo)
            this.CardInfo = obj;
        }
        this.IDVerificationToken = 'IDVerificationToken' in params ? params.IDVerificationToken : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * GenerateReflectSequence response structure.
 * @class
 */
class GenerateReflectSequenceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The resource URL of the light sequence, which needs to be downloaded and passed through to the SDK to start the eKYC process.
         * @type {string || null}
         */
        this.ReflectSequenceUrl = null;

        /**
         * The MD5 hash value of the light sequence, which is used to check whether the light sequence is altered.
         * @type {string || null}
         */
        this.ReflectSequenceMd5 = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ReflectSequenceUrl = 'ReflectSequenceUrl' in params ? params.ReflectSequenceUrl : null;
        this.ReflectSequenceMd5 = 'ReflectSequenceMd5' in params ? params.ReflectSequenceMd5 : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * GetWebVerificationResultIntl request structure.
 * @class
 */
class GetWebVerificationResultIntlRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The token for the web-based verification, which is generated using the `ApplyWebVerificationBizTokenIntl` API.
         * @type {string || null}
         */
        this.BizToken = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.BizToken = 'BizToken' in params ? params.BizToken : null;

    }
}

/**
 * General liscense information.
 * @class
 */
class GeneralCard extends  AbstractModel {
    constructor(){
        super();

        /**
         * License number
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LicenseNumber = null;

        /**
         * Personal number, which is returned when it is a passport
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.PersonalNumber = null;

        /**
         * The first line of passport machine reading code
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.PassportCodeFirst = null;

        /**
         * The first line of passport machine reading code
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.PassportCodeSecond = null;

        /**
         * Date of expiry in the format of YYYY-MM-DD
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ExpirationDate = null;

        /**
         * Valid date in the format of YYYY-MM-DD
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DueDate = null;

        /**
         * Date of issue in the format of YYYY-MM-DD
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.IssuedDate = null;

        /**
         * Issuing authority
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.IssuedAuthority = null;

        /**
         * Issuing country, which is returned following the ISO 3166 country coding specification
Note: This field may return null, indicating that no valid values can be obtained.
Example: MYS
         * @type {string || null}
         */
        this.IssuedCountry = null;

        /**
         * Full Name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FullName = null;

        /**
         * First name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FirstName = null;

        /**
         * Last name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LastName = null;

        /**
         * Gender on the license
- M: male
- F: female
- X: other gender
Note: This field may return null, indicating that no valid values can be obtained.
Example: M
         * @type {string || null}
         */
        this.Sex = null;

        /**
         * Age. 0 indicates that no valid information is obtained.
Example: 0
         * @type {string || null}
         */
        this.Age = null;

        /**
         * Birthday
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Birthday = null;

        /**
         * Birth place
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.BirthPlace = null;

        /**
         * Nationality, which is returned following the ISO 3166 country coding specification
Note: This field may return null, indicating that no valid values can be obtained.
Example: IND
         * @type {string || null}
         */
        this.Nationality = null;

        /**
         * Registration number
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.RegistrationNumber = null;

        /**
         * Address
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Address || null}
         */
        this.Address = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LicenseNumber = 'LicenseNumber' in params ? params.LicenseNumber : null;
        this.PersonalNumber = 'PersonalNumber' in params ? params.PersonalNumber : null;
        this.PassportCodeFirst = 'PassportCodeFirst' in params ? params.PassportCodeFirst : null;
        this.PassportCodeSecond = 'PassportCodeSecond' in params ? params.PassportCodeSecond : null;
        this.ExpirationDate = 'ExpirationDate' in params ? params.ExpirationDate : null;
        this.DueDate = 'DueDate' in params ? params.DueDate : null;
        this.IssuedDate = 'IssuedDate' in params ? params.IssuedDate : null;
        this.IssuedAuthority = 'IssuedAuthority' in params ? params.IssuedAuthority : null;
        this.IssuedCountry = 'IssuedCountry' in params ? params.IssuedCountry : null;
        this.FullName = 'FullName' in params ? params.FullName : null;
        this.FirstName = 'FirstName' in params ? params.FirstName : null;
        this.LastName = 'LastName' in params ? params.LastName : null;
        this.Sex = 'Sex' in params ? params.Sex : null;
        this.Age = 'Age' in params ? params.Age : null;
        this.Birthday = 'Birthday' in params ? params.Birthday : null;
        this.BirthPlace = 'BirthPlace' in params ? params.BirthPlace : null;
        this.Nationality = 'Nationality' in params ? params.Nationality : null;
        this.RegistrationNumber = 'RegistrationNumber' in params ? params.RegistrationNumber : null;

        if (params.Address) {
            let obj = new Address();
            obj.deserialize(params.Address)
            this.Address = obj;
        }

    }
}

/**
 * LivenessCompare response structure.
 * @class
 */
class LivenessCompareResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The best screenshot of the video after successful verification. The photo is Base64-encoded and in JPG format.
         * @type {string || null}
         */
        this.BestFrameBase64 = null;

        /**
         * Similarity. Value range: [0.00, 100.00]. As a recommendation, when the similarity is greater than or equal to 70, it can be determined that the two faces are of the same person. You can adjust the threshold according to your specific scenario (the FAR at the threshold of 70 is 0.1%, and FAR at the threshold of 80 is 0.01%).
         * @type {number || null}
         */
        this.Sim = null;

        /**
         * Service error code. `Success` will be returned for success. For error information, please see the `FailedOperation` section in the error code list below.
         * @type {string || null}
         */
        this.Result = null;

        /**
         * Service result description.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * 
         * @type {Array.<string> || null}
         */
        this.BestFrameList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.BestFrameBase64 = 'BestFrameBase64' in params ? params.BestFrameBase64 : null;
        this.Sim = 'Sim' in params ? params.Sim : null;
        this.Result = 'Result' in params ? params.Result : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.BestFrameList = 'BestFrameList' in params ? params.BestFrameList : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DetectAIFakeFaces response structure.
 * @class
 */
class DetectAIFakeFacesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Whether the detected image is an attack: Low: No attack risk Mid: Moderately suspected attack High: Highly suspected attack
         * @type {string || null}
         */
        this.AttackRiskLevel = null;

        /**
         * A list of suspected attack traces detected. Note: When no attack traces are detected, an empty array is returned. This parameter is only used as a reference for result judgment. In actual applications, it is still recommended to use the result of AttackRiskLevel.
         * @type {Array.<AttackRiskDetail> || null}
         */
        this.AttackRiskDetailList = null;

        /**
         * Additional Information
         * @type {ExtraInfo || null}
         */
        this.ExtraInfo = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AttackRiskLevel = 'AttackRiskLevel' in params ? params.AttackRiskLevel : null;

        if (params.AttackRiskDetailList) {
            this.AttackRiskDetailList = new Array();
            for (let z in params.AttackRiskDetailList) {
                let obj = new AttackRiskDetail();
                obj.deserialize(params.AttackRiskDetailList[z]);
                this.AttackRiskDetailList.push(obj);
            }
        }

        if (params.ExtraInfo) {
            let obj = new ExtraInfo();
            obj.deserialize(params.ExtraInfo)
            this.ExtraInfo = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Philippines UMID Card
 * @class
 */
class PhilippinesUMID extends  AbstractModel {
    constructor(){
        super();

        /**
         * Surname
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Surname = null;

        /**
         * Middle Name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.MiddleName = null;

        /**
         * First name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.GivenName = null;

        /**
         * Gender
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Sex = null;

        /**
         * Birthday
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Birthday = null;

        /**
         * Address
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Address = null;

        /**
         * CRN code
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CRN = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Surname = 'Surname' in params ? params.Surname : null;
        this.MiddleName = 'MiddleName' in params ? params.MiddleName : null;
        this.GivenName = 'GivenName' in params ? params.GivenName : null;
        this.Sex = 'Sex' in params ? params.Sex : null;
        this.Birthday = 'Birthday' in params ? params.Birthday : null;
        this.Address = 'Address' in params ? params.Address : null;
        this.CRN = 'CRN' in params ? params.CRN : null;

    }
}

/**
 * Philippines TinID Card
 * @class
 */
class PhilippinesTinID extends  AbstractModel {
    constructor(){
        super();

        /**
         * License number
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LicenseNumber = null;

        /**
         * Full name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FullName = null;

        /**
         * Address
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Address = null;

        /**
         * Birthday
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Birthday = null;

        /**
         * Date of issue
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.IssueDate = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LicenseNumber = 'LicenseNumber' in params ? params.LicenseNumber : null;
        this.FullName = 'FullName' in params ? params.FullName : null;
        this.Address = 'Address' in params ? params.Address : null;
        this.Birthday = 'Birthday' in params ? params.Birthday : null;
        this.IssueDate = 'IssueDate' in params ? params.IssueDate : null;

    }
}

/**
 * ApplyCardVerification request structure.
 * @class
 */
class ApplyCardVerificationRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Please select the country code of ID document.
IDN: Indonesia
HKG: Hong Kong
THA: Thailand
MYS: Malaysia
SGP: Singapore
JPN: Japan
TWN:Taiwan
BGD:Bangladesh 
NGA:Nigeria
PAK:Pakistan
AUTO: Automatic Identification
         * @type {string || null}
         */
        this.Nationality = null;

        /**
         * Please select the type of ID document. The supported options are:
ID_CARD
PASSPORT
DRIVING_LICENSE
AUTO
         * @type {string || null}
         */
        this.CardType = null;

        /**
         * Base64 value for the front of the document. Supported image formats: PNG, JPEG. 
GIF format is not supported yet. Supported image size: The downloaded image cannot exceed 5M after Base64 encoding.
The image download takes no more than 3 seconds. Supported image resolution: 8000*8000. One of ImageUrlFront and ImageBase64 Front of the image must be provided. If both are provided, only ImageUrlFront will be used.
         * @type {string || null}
         */
        this.ImageBase64Front = null;

        /**
         * Base64 value of the reverse side of the document. Supported image formats: PNG, JPEG. 
GIF format is not supported yet. Supported image size: The downloaded image cannot exceed 5M after Base64 encoding. The image download takes no more than 3 seconds. Maximum supported image resolution: 8000*8000. For some certificates, one of ImageUrlBack and ImageBase64Back must be provided. If both are provided, only ImageUrlBack will be used.
         * @type {string || null}
         */
        this.ImageBase64Back = null;

        /**
         * The URL value on the back of the certificate. Supported image formats: PNG, JPEG. 
GIF format is not supported yet. Supported image size: The downloaded image cannot exceed 5M after Base64 encoding. The image download takes no more than 3 seconds. Maximum supported image resolution: 8000*8000. One of ImageUrlFront and ImageBase64Front of the image must be provided. If both are provided, only ImageUrlFront will be used.
         * @type {string || null}
         */
        this.ImageUrlFront = null;

        /**
         * The URL value on the back of the certificate. Supported image formats: PNG, JPEG. 
GIF format is not supported yet. Supported image size: The downloaded image cannot exceed 5M after Base64 encoding. The image download takes no more than 3 seconds. Maximum supported image resolution: 8000*8000. For some certificates, one of ImageUrlBack and ImageBase64Back must be provided. If both are provided, only ImageUrlBack will be used.
         * @type {string || null}
         */
        this.ImageUrlBack = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Nationality = 'Nationality' in params ? params.Nationality : null;
        this.CardType = 'CardType' in params ? params.CardType : null;
        this.ImageBase64Front = 'ImageBase64Front' in params ? params.ImageBase64Front : null;
        this.ImageBase64Back = 'ImageBase64Back' in params ? params.ImageBase64Back : null;
        this.ImageUrlFront = 'ImageUrlFront' in params ? params.ImageUrlFront : null;
        this.ImageUrlBack = 'ImageUrlBack' in params ? params.ImageUrlBack : null;

    }
}

/**
 * LivenessCompare request structure.
 * @class
 */
class LivenessCompareRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Liveness detection type. Valid values: LIP/ACTION/SILENT.
LIP: numeric mode; ACTION: motion mode; SILENT: silent mode. You need to select a mode to input.
         * @type {string || null}
         */
        this.LivenessType = null;

        /**
         * Base64 string of the image for face comparison.
The size of the Base64-encoded image data can be up to 3 MB. JPG and PNG formats are supported.
Please use the standard Base64 encoding scheme (with the "=" padding). For the encoding conventions, please see RFC 4648.

Either the `ImageUrl` or `ImageBase64` of the image must be provided. If both are provided, only `ImageBase64` will be used.
         * @type {string || null}
         */
        this.ImageBase64 = null;

        /**
         * URL of the image for face comparison. The size of the downloaded image after Base64 encoding can be up to 3 MB. JPG and PNG formats are supported.

Either the `ImageUrl` or `ImageBase64` of the image must be provided. If both are provided, only `ImageBase64` will be used.

We recommend you store the image in Tencent Cloud, as a Tencent Cloud URL can guarantee higher download speed and stability. The download speed and stability of non-Tencent Cloud URLs may be low.
         * @type {string || null}
         */
        this.ImageUrl = null;

        /**
         * Lip mode: set this parameter to a custom 4-digit verification code.
Action mode: set this parameter to a custom action sequence (e.g., `2,1` or `1,2`).
Silent mode: do not pass in this parameter.
         * @type {string || null}
         */
        this.ValidateData = null;

        /**
         * Optional configuration (a JSON string)
{
"BestFrameNum": 2  // Return multiple best screenshots. Value range: 2−10
}
         * @type {string || null}
         */
        this.Optional = null;

        /**
         * Base64 string of the video for liveness detection.
The size of the Base64-encoded video data can be up to 8 MB. MP4, AVI, and FLV formats are supported.
Please use the standard Base64 encoding scheme (with the "=" padding). For the encoding conventions, please see RFC 4648.

Either the `VideoUrl` or `VideoBase64` of the video must be provided. If both are provided, only `VideoBase64` will be used.
         * @type {string || null}
         */
        this.VideoBase64 = null;

        /**
         * URL of the video for liveness detection. The size of the downloaded video after Base64 encoding can be up to 8 MB. It takes no more than 4 seconds to download. MP4, AVI, and FLV formats are supported.

Either the `VideoUrl` or `VideoBase64` of the video must be provided. If both are provided, only `VideoBase64` will be used.

We recommend you store the video in Tencent Cloud, as a Tencent Cloud URL can guarantee higher download speed and stability. The download speed and stability of non-Tencent Cloud URLs may be low.
         * @type {string || null}
         */
        this.VideoUrl = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LivenessType = 'LivenessType' in params ? params.LivenessType : null;
        this.ImageBase64 = 'ImageBase64' in params ? params.ImageBase64 : null;
        this.ImageUrl = 'ImageUrl' in params ? params.ImageUrl : null;
        this.ValidateData = 'ValidateData' in params ? params.ValidateData : null;
        this.Optional = 'Optional' in params ? params.Optional : null;
        this.VideoBase64 = 'VideoBase64' in params ? params.VideoBase64 : null;
        this.VideoUrl = 'VideoUrl' in params ? params.VideoUrl : null;

    }
}

/**
 * Malaysia ID card.
 * @class
 */
class MLIDCard extends  AbstractModel {
    constructor(){
        super();

        /**
         * Full Name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * License number
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ID = null;

        /**
         * Gender
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Sex = null;

        /**
         * Address
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Address = null;

        /**
         * Lisence type
MyKad ID card
MyPR Permanent resident ID card
MyTentera Military ID card
MyKAS Temporary ID card
POLIS Police ID card
IKAD Labor ID card
MyKid Juvenile ID card
Example: MyKad
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Birthday (Currently, this filed only supports IKAD labor ID card and MyKad ID card)
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Birthday = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.ID = 'ID' in params ? params.ID : null;
        this.Sex = 'Sex' in params ? params.Sex : null;
        this.Address = 'Address' in params ? params.Address : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.Birthday = 'Birthday' in params ? params.Birthday : null;

    }
}

/**
 * The content of a single license in the license information.
 * @class
 */
class OCRResult extends  AbstractModel {
    constructor(){
        super();

        /**
         * Is the indentity verification or OCR process passed
         * @type {boolean || null}
         */
        this.IsPass = null;

        /**
         * The Base64 of ID card image
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CardImageBase64 = null;

        /**
         * OCR result of the ID card.
         * @type {CardInfo || null}
         */
        this.CardInfo = null;

        /**
         * OCR result of the ID card.
         * @type {NormalCardInfo || null}
         */
        this.NormalCardInfo = null;

        /**
         * The request id
         * @type {string || null}
         */
        this.RequestId = null;

        /**
         * Base64 of cropped image of ID card
         * @type {string || null}
         */
        this.CardCutImageBase64 = null;

        /**
         * Base64 of the cropped image on the reverse side of the ID card
         * @type {string || null}
         */
        this.CardBackCutImageBase64 = null;

        /**
         * Card Warning Information

-9101 Alarm for covered certificate,
-9102 Alarm for photocopied certificate,
-9103 Alarm for photographed certificate,
-9104 Alarm for PS certificate,
-9107 Alarm for reflective certificate,
-9108 Alarm for blurry image,
-9109 This capability is not enabled.
         * @type {Array.<number> || null}
         */
        this.WarnCardInfos = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.IsPass = 'IsPass' in params ? params.IsPass : null;
        this.CardImageBase64 = 'CardImageBase64' in params ? params.CardImageBase64 : null;

        if (params.CardInfo) {
            let obj = new CardInfo();
            obj.deserialize(params.CardInfo)
            this.CardInfo = obj;
        }

        if (params.NormalCardInfo) {
            let obj = new NormalCardInfo();
            obj.deserialize(params.NormalCardInfo)
            this.NormalCardInfo = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;
        this.CardCutImageBase64 = 'CardCutImageBase64' in params ? params.CardCutImageBase64 : null;
        this.CardBackCutImageBase64 = 'CardBackCutImageBase64' in params ? params.CardBackCutImageBase64 : null;
        this.WarnCardInfos = 'WarnCardInfos' in params ? params.WarnCardInfos : null;

    }
}

/**
 * DetectReflectLivenessAndCompare response structure.
 * @class
 */
class DetectReflectLivenessAndCompareResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Temporary URL of the best screenshot (.jpg) of the video after successful verification. Both the screenshot and the URL are valid for two hours only, so you need to download the screenshot within this period.
         * @type {string || null}
         */
        this.BestFrameUrl = null;

        /**
         * MD5 hash value (32-bit) of the best screenshot of the video after successful verification, which is used to verify the `BestFrame` consistency.
         * @type {string || null}
         */
        this.BestFrameMd5 = null;

        /**
         * Service error code. `Success` will be returned for success. For error information, see the `FailedOperation` section in the error code list below.
         * @type {string || null}
         */
        this.Result = null;

        /**
         * Service result description
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Similarity. Value range: [0.00, 100.00]. As a recommendation, when the similarity is greater than or equal to 70, it can be determined that the two faces are of the same person. You can adjust the threshold according to your specific scenario (the FAR at the threshold of 70 is 0.1%, and FAR at the threshold of 80 is 0.01%).
         * @type {number || null}
         */
        this.Sim = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.BestFrameUrl = 'BestFrameUrl' in params ? params.BestFrameUrl : null;
        this.BestFrameMd5 = 'BestFrameMd5' in params ? params.BestFrameMd5 : null;
        this.Result = 'Result' in params ? params.Result : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.Sim = 'Sim' in params ? params.Sim : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * GetLivenessResult request structure.
 * @class
 */
class GetLivenessResultRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The token used to identify an SDK-based verification process.
         * @type {string || null}
         */
        this.SdkToken = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkToken = 'SdkToken' in params ? params.SdkToken : null;

    }
}

/**
 * Pakistan driving license
 * @class
 */
class PakistanDrivingLicense extends  AbstractModel {
    constructor(){
        super();

        /**
         * Last name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LastName = null;

        /**
         * First name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FirstName = null;

        /**
         * License number.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LicenseNumber = null;

        /**
         * Age.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Age = null;

        /**
         * Birthday.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Birthday = null;

        /**
         * Gender.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.IssuedCountry = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LastName = 'LastName' in params ? params.LastName : null;
        this.FirstName = 'FirstName' in params ? params.FirstName : null;
        this.LicenseNumber = 'LicenseNumber' in params ? params.LicenseNumber : null;
        this.Age = 'Age' in params ? params.Age : null;
        this.Birthday = 'Birthday' in params ? params.Birthday : null;
        this.IssuedCountry = 'IssuedCountry' in params ? params.IssuedCountry : null;

    }
}

/**
 * The description of a single comparison result.
 * @class
 */
class CompareResult extends  AbstractModel {
    constructor(){
        super();

        /**
         * The final verification result code.
0: Success.
1001: Failed to call the liveness detection engine.
1004: Face detection failed.
2004: The uploaded face image is too large or too small.
2012: The face is not fully exposed.
2013: No face is detected.
2014: The resolution of the uploaded image is too low . Please upload a new one.
2015: Face comparison failed.
2016: The similarity did not reach the passing standard.
         * @type {string || null}
         */
        this.ErrorCode = null;

        /**
         * The description of the final verification result.
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The liveness algorithm package generated during this SDK-based liveness detection.
         * @type {FileInfo || null}
         */
        this.LiveData = null;

        /**
         * The download URL of the video used for verification, which contains specific color reflection effects, is valid for 10 minutes.
         * @type {FileInfo || null}
         */
        this.LiveVideo = null;

        /**
         * Records the specific action performed by the user, used for AI Face Shield analysis.
         * @type {FileInfo || null}
         */
        this.ActionVideo = null;

        /**
         * The liveness detection result code.
0: Success.
1001: Failed to call the liveness detection engine.
1004: Face detection failed.
         * @type {string || null}
         */
        this.LiveErrorCode = null;

        /**
         * The description of the liveness detection result.
         * @type {string || null}
         */
        this.LiveErrorMsg = null;

        /**
         * The download URL of the face screenshot during verification, which is valid for 10 minutes.
Note: This field may return null, indicating that no valid value can be obtained.
         * @type {FileInfo || null}
         */
        this.BestFrame = null;

        /**
         * The download URL of the profile photo screenshot from the identity document, which is valid for 10 minutes.
         * @type {FileInfo || null}
         */
        this.ProfileImage = null;

        /**
         * The face comparison result code.
0: Success.
2004: The uploaded face image is too large or too small.
2012: The face is not fully exposed.
2013: No face is detected.
2014: The resolution of the uploaded image is too low . Please upload a new one.
2015: Face comparison failed.
2016: The similarity did not reach the passing standard.
Note: This field may return null, indicating that no valid value can be obtained.
         * @type {string || null}
         */
        this.CompareErrorCode = null;

        /**
         * The description of the face comparison result.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CompareErrorMsg = null;

        /**
         * The similarity score of face comparison.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Sim = null;

        /**
         * This parameter is disused.
         * @type {boolean || null}
         */
        this.IsNeedCharge = null;

        /**
         * The identity document photo info edited by the user. Currently, this parameter is not applied.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {FileInfo || null}
         */
        this.CardInfoInputJson = null;

        /**
         * The request ID of this verification process.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ErrorCode = 'ErrorCode' in params ? params.ErrorCode : null;
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;

        if (params.LiveData) {
            let obj = new FileInfo();
            obj.deserialize(params.LiveData)
            this.LiveData = obj;
        }

        if (params.LiveVideo) {
            let obj = new FileInfo();
            obj.deserialize(params.LiveVideo)
            this.LiveVideo = obj;
        }

        if (params.ActionVideo) {
            let obj = new FileInfo();
            obj.deserialize(params.ActionVideo)
            this.ActionVideo = obj;
        }
        this.LiveErrorCode = 'LiveErrorCode' in params ? params.LiveErrorCode : null;
        this.LiveErrorMsg = 'LiveErrorMsg' in params ? params.LiveErrorMsg : null;

        if (params.BestFrame) {
            let obj = new FileInfo();
            obj.deserialize(params.BestFrame)
            this.BestFrame = obj;
        }

        if (params.ProfileImage) {
            let obj = new FileInfo();
            obj.deserialize(params.ProfileImage)
            this.ProfileImage = obj;
        }
        this.CompareErrorCode = 'CompareErrorCode' in params ? params.CompareErrorCode : null;
        this.CompareErrorMsg = 'CompareErrorMsg' in params ? params.CompareErrorMsg : null;
        this.Sim = 'Sim' in params ? params.Sim : null;
        this.IsNeedCharge = 'IsNeedCharge' in params ? params.IsNeedCharge : null;

        if (params.CardInfoInputJson) {
            let obj = new FileInfo();
            obj.deserialize(params.CardInfoInputJson)
            this.CardInfoInputJson = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

module.exports = {
    GetLivenessResultResponse: GetLivenessResultResponse,
    GetFaceIdTokenIntlResponse: GetFaceIdTokenIntlResponse,
    InternationalIDPassport: InternationalIDPassport,
    NigeriaDrivingLicense: NigeriaDrivingLicense,
    GetSdkVerificationResultResponse: GetSdkVerificationResultResponse,
    GetSdkVerificationResultRequest: GetSdkVerificationResultRequest,
    DetectAIFakeFacesRequest: DetectAIFakeFacesRequest,
    AttackRiskDetail: AttackRiskDetail,
    ExtraInfo: ExtraInfo,
    CreateUploadUrlResponse: CreateUploadUrlResponse,
    NormalMLIDCard: NormalMLIDCard,
    ApplyCardVerificationResponse: ApplyCardVerificationResponse,
    DetectReflectLivenessAndCompareRequest: DetectReflectLivenessAndCompareRequest,
    GetFaceIdTokenIntlRequest: GetFaceIdTokenIntlRequest,
    JapanIDCard: JapanIDCard,
    EditDetail: EditDetail,
    ApplyWebVerificationTokenResponse: ApplyWebVerificationTokenResponse,
    NormalHKIDCard: NormalHKIDCard,
    GetWebVerificationResultRequest: GetWebVerificationResultRequest,
    ThailandIDCard: ThailandIDCard,
    VerificationDetail: VerificationDetail,
    GetWebVerificationResultIntlResponse: GetWebVerificationResultIntlResponse,
    FileInfo: FileInfo,
    HKIDCard: HKIDCard,
    SingaporeIDCard: SingaporeIDCard,
    IndonesiaDrivingLicense: IndonesiaDrivingLicense,
    GetFaceIdResultIntlRequest: GetFaceIdResultIntlRequest,
    NormalCardInfo: NormalCardInfo,
    GetFaceIdResultIntlResponse: GetFaceIdResultIntlResponse,
    ApplySdkVerificationTokenRequest: ApplySdkVerificationTokenRequest,
    GenerateReflectSequenceRequest: GenerateReflectSequenceRequest,
    BangladeshIDCard: BangladeshIDCard,
    VideoLivenessCompareResponse: VideoLivenessCompareResponse,
    PhilippinesSSSID: PhilippinesSSSID,
    CardVerifyResult: CardVerifyResult,
    TaiWanIDCard: TaiWanIDCard,
    VideoLivenessCompareRequest: VideoLivenessCompareRequest,
    ApplyWebVerificationTokenRequest: ApplyWebVerificationTokenRequest,
    ApplyWebVerificationBizTokenIntlResponse: ApplyWebVerificationBizTokenIntlResponse,
    PakistanIDCard: PakistanIDCard,
    ApplyLivenessTokenResponse: ApplyLivenessTokenResponse,
    GetCardVerificationResultRequest: GetCardVerificationResultRequest,
    CardInfo: CardInfo,
    PhilippinesVoteID: PhilippinesVoteID,
    WebVerificationConfigIntl: WebVerificationConfigIntl,
    MainlandIDCard: MainlandIDCard,
    Encryption: Encryption,
    Address: Address,
    RetrievalLivenessExtraInfo: RetrievalLivenessExtraInfo,
    NigeriaIDCard: NigeriaIDCard,
    NormalIndonesiaIDCard: NormalIndonesiaIDCard,
    CompareFaceLivenessResponse: CompareFaceLivenessResponse,
    IndonesiaIDCard: IndonesiaIDCard,
    ApplySdkVerificationTokenResponse: ApplySdkVerificationTokenResponse,
    HMTPermit: HMTPermit,
    CreateUploadUrlRequest: CreateUploadUrlRequest,
    ApplyWebVerificationBizTokenIntlRequest: ApplyWebVerificationBizTokenIntlRequest,
    GetWebVerificationResultResponse: GetWebVerificationResultResponse,
    CompareFaceLivenessRequest: CompareFaceLivenessRequest,
    MacaoIDCard: MacaoIDCard,
    ApplyLivenessTokenRequest: ApplyLivenessTokenRequest,
    NormalThailandIDCard: NormalThailandIDCard,
    PhilippinesDrivingLicense: PhilippinesDrivingLicense,
    GetCardVerificationResultResponse: GetCardVerificationResultResponse,
    GenerateReflectSequenceResponse: GenerateReflectSequenceResponse,
    GetWebVerificationResultIntlRequest: GetWebVerificationResultIntlRequest,
    GeneralCard: GeneralCard,
    LivenessCompareResponse: LivenessCompareResponse,
    DetectAIFakeFacesResponse: DetectAIFakeFacesResponse,
    PhilippinesUMID: PhilippinesUMID,
    PhilippinesTinID: PhilippinesTinID,
    ApplyCardVerificationRequest: ApplyCardVerificationRequest,
    LivenessCompareRequest: LivenessCompareRequest,
    MLIDCard: MLIDCard,
    OCRResult: OCRResult,
    DetectReflectLivenessAndCompareResponse: DetectReflectLivenessAndCompareResponse,
    GetLivenessResultRequest: GetLivenessResultRequest,
    PakistanDrivingLicense: PakistanDrivingLicense,
    CompareResult: CompareResult,

}
